0

これら 2 つのクエリに重複があるかどうかを確認しようとしています

次の PHP/MYSQL コードは動作しますが、扱いにくいです。2 つのクエリ、データが配列に変換され、配列が比較されます。

(オーバーラップがあるかどうかを返すため、これは関数であることに注意してください)

$manager_sql = "SELECT league_id FROM league_members WHERE manager = 1 AND member_active = 1 AND player_id = $mi";
$player_sql = "SELECT league_id FROM league_members WHERE member_active = 1 AND player_id = $pi";

$manager_result = mysql_query($manager_sql) or die(mysql_error());
$manager_leagues = array();
while($sqlrow = mysql_fetch_array($manager_result)) {
    extract( $sqlrow );
    $manager_leagues[] = $league_id;
}

$player_result = mysql_query($player_sql) or die(mysql_error());
$player_leagues = array();
while($sqlrow = mysql_fetch_array($player_result)) {
    extract( $sqlrow );
    $player_leagues[] = $league_id;
}

$result = array_intersect($manager_leagues, $player_leagues);

return count($result) > 0;

一度にクエリを実行するためのいくつかの試みを次に示します。

(SELECT league_id FROM league_members WHERE manager = 1 AND member_active = 2 AND player_id = '$mi')
    UNION ALL
(SELECT league_id FROM league_members WHERE member_active = 1 AND player_id = '$pi')

動作しているように見えますが、返される行が多すぎます:

SELECT league_id FROM league_members WHERE league_id IN (
    SELECT league_id FROM league_members WHERE manager = 1 AND member_active = 1 AND player_id = '$mi'
) AND league_id IN (
    SELECT league_id FROM league_members WHERE member_active = 1 AND player_id = '$pi'
)
4

6 に答える 6

0

このクエリを試してください:

$sql = "SELECT ls1.league_id FROM league_members AS ls1
        INNER JOIN league_members AS ls2 ON ls1.league_id = ls2.league_id
        WHERE ls1.manager = 1 AND ls1.member_active = 1 AND ls1.player_id = '".$mi."' 
        AND ls2.member_active = 1 AND ls2.player_id = '".$pi."'"

ノート :

  1. mysql_* 関数は非推奨です。mysqli_* 関数または PDO を使用してください
  2. クエリは sql インジェクションに対して脆弱です。セキュリティを確保してください。
于 2013-02-27T06:07:36.693 に答える
0

$mi監督と選手の両方を持つリーグ ID を探しています$piか?

SELECT DISTINCT l.league_id FROM league_members l JOIN league_members l2 ON l.league_id = l2.league_id AND l.member_active = 1 AND l2.member_active = 1 AND l.manager = 1 AND l2.manager = 0 WHERE l.player_id = $mi AND l2.player_id = $pi;
于 2013-02-27T06:08:16.973 に答える
0

試す

"SELECT league_id FROM league_members WHERE manager = 1 AND member_active = 1 AND (player_id = '".$mi."' OR player_id = '".$pi."')";
于 2013-02-27T06:08:47.957 に答える
0

以下で試してみてください。そうでない場合は、どのような問題が発生しているか教えてください。

SELECT リーグ ID FROM リーグメンバー WHERE リーグ ID IN ( SELECT リーグ ID FROM リーグメンバー WHERE (メンバーアクティブ = 1 AND (プレーヤー ID = '$mi' または プレーヤー ID = '$pi') AND マネージャー = 1)

于 2013-02-27T06:09:20.250 に答える
0

私は明らかにこれを試していませんが、distinctキーワードを追加した最後のクエリをお勧めします。

SELECT distinct league_id FROM league_members WHERE league_id IN (
    SELECT league_id FROM league_members WHERE manager = 1 AND member_active = 1 AND player_id = '$mi'
) AND league_id IN (
    SELECT league_id FROM league_members WHERE member_active = 1 AND player_id = '$pi'
)
于 2013-02-27T06:11:23.803 に答える
0

これはどう?

SELECT league_id 
FROM   league_members 
WHERE  (manager = 1 AND member_active = 1 AND player_id = $mi) OR
       (member_active = 1 AND player_id = $pi)
GROUP  BY league_id
HAVING COUNT(*) = 2
于 2013-02-27T06:18:36.440 に答える