我遇到了一个问题。
以下代码的作用是,仅在第二个表的条件匹配(并且从查询[WHERE]中排除当前成员[player_id])时,才从第一个表中获取详细信息。
我需要做的是从第一个表中获取数据,而从第二个表中排除用户。
因此,如果播放器已经与用户匹配,则将其从结果中排除; 它应该是以前没有匹配的用户的列表。
匹配项仅在事件发生后存在,因此需要检查是否存在匹配项。
我认为在JOIN中使用<>就足够了,但是它不起作用,并且旧线程说要使用OUTER,但这也不起作用。 LEFT JOIN不排除,RIGHT JOIN返回的值与JOIN相同。
SELECT
a.user_id,
b.*
FROM
tblUsers a
JOIN tblMatches b
ON (b.player_1 = ". $player_id ." AND b.player_2 = a.user_id)
OR (b.player_2 = ". $player_id ." AND b.player_1 = a.user_id)
WHERE
a.user_id <> ". $player_id ."
GROUP BY
a.user_id
样本数据更新:
答案 0 :(得分:0)
好的,是的...迈克尔·伯科夫斯基(Michael Berkowski)说的话,LEFT JOIN和IS NULL。
这是我更新的代码:
SELECT
a.user_id,
b.*
FROM
$wpdb->usermeta a
LEFT JOIN wp_matches b
ON (b.player_1 = ". $player_id ." AND b.player_2 = a.user_id)
OR (b.player_2 = ". $player_id ." AND b.player_1 = a.user_id)
WHERE
b.player_1 IS NULL AND b.player_2 IS NULL
GROUP BY
a.user_id
需要进行一些调整以包括更多条件,但是我现在不包括任何匹配的用户。
答案 1 :(得分:0)
是否只需要从变量中与玩家对抗的用户?
然后,NOT EXISTS可以帮助解决这个问题。
类似这样的东西:
SELECT user_id
FROM tblUsers u
WHERE NOT EXISTS
(
SELECT 1
FROM tblMatches m
WHERE @player_id IN (m.player_1, m.player_2)
AND u.user_id IN (m.player_1, m.player_2)
)