我有两张桌子
事件:
id| id_event| id_user | data
++++++++++++++++++++++++++++++++++
1 2 4 20.08.2012
2 2 5 20.08.2012
3 2 6 20.08.2012
的评价:
id | id_event | id_user_who's rate | id_user_which get rate | rate
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 2 4 5
我想要实现的是选择参与同一事件的用户id_user
等于id_user_login
并且他们尚未对他们进行评分。
所以就像上面的例子id_user_login
4号评级用户5号所以我需要查询这将给我回用户6
修改
$a = mysql_query("SELECT * FROM event as ev WHERE ev.id_user not in ( select $log1[id] union all SELECT id_user_whos_rate FROM event as e INNER JOIN rating as r on r.id_event = e.id_event WHERE e.id_user = $log1[id])
我已经尝试了这个,作为回报,我从id_user_login的事件表中收到了所有用户,而其中一个用户已被评级,因此他不应该显示。
答案 0 :(得分:0)
SELECT a.id_user
FROM `event` a
LEFT JOIN rating b
ON a.id_event = b.id_event AND
a.id_user = b.id_user_which_get_rate
WHERE a.id_user <> 4 AND
EXISTS
(
SELECT 1
FROM `event` c
WHERE a.id_event = c.id_event AND
c.id_user = 4
) AND
b.id IS NULL
表event
通过列rating
和id_event
使用id_user
与表LEFT JOIN
结合使用。它连接在两列上,以便仅选择属于特定事件中用户的行。
WHERE
子句的目的是从结果列表中排除当前用户。对于登录的特定当前用户,EXISTS
仅过滤event
。