在两个表的基础上选择行

时间:2013-09-03 00:33:44

标签: php mysql sql

我有两张桌子

事件:

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的事件表中收到了所有用户,而其中一个用户已被评级,因此他不应该显示。

1 个答案:

答案 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通过列ratingid_event使用id_user与表LEFT JOIN结合使用。它连接在两列上,以便仅选择属于特定事件中用户的行。

WHERE子句的目的是从结果列表中排除当前用户。对于登录的特定当前用户,EXISTS仅过滤event