profiles:
+--------+
id
name
surname
voted:
+--------+
id
profileid
targetid
我有一个包含用户配置文件的表和另一个我跟踪谁对谁投票的表。 (profileid
是选民的个人资料 ID,targetid
是被投票人的个人资料 ID)
我愿意:
获取当前用户(例如 ID 为 1)未投票(也不包括他自己)的所有个人资料。
我试过这个:
SELECT profiles.name,profiles.surname,voted.targetid
FROM profiles
JOIN voted
ON profiles.id = voted.profileid
WHERE profiles.id != 1 # exclude self
看直播fiddle在这里,这不起作用,因为我不确定如何形成 JOIN。
如何才能做到这一点?
最佳答案
这里有一个方法:
SELECT
profiles.name,
profiles.surname
FROM profiles
LEFT JOIN voted
ON profiles.id = voted.targetid
AND voted.profileid = 1 /* <- your param here */
AND voted.profileid != voted.targetid
/* has not voted for him/herself */
WHERE voted.profileid is null
结果如下:http://sqlfiddle.com/#!9/80a6b/14
之所以有效,是因为 LEFT JOIN
与 WHERE
子句相结合。
JOIN 查找配置文件已投票的人(不包括自己投票),WHERE 选择与之相反的人(其中 LEFT JOIN
带来空值)。
请注意,我从输出中抑制了 targetid
列,因为我认为它没有意义(我们正在寻找投票不存在的对) .
关于mysql - 获取用户未对 SQL 查询投票的所有配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489432/