これら 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'
)