Mysql - 加入比赛和不比赛

时间:2010-04-05 17:57:43

标签: php mysql database

这与我的另一个问题有关: Managing Foreign Keys

我正在尝试加入比赛和不比赛表。

所以我有一份兴趣列表,一个用户列表和一个用户兴趣列表。

我希望查询返回所有兴趣,无论用户是否有兴趣(在这种情况下应该为null),只有user = x。每次我使查询工作时,用户专门具有的唯一匹配兴趣,而不是所有兴趣,无论他们是否拥有它。

2 个答案:

答案 0 :(得分:2)

您应该使用LEFT JOINS

这样的东西
SELECT  *
FROM    interests i LEFT JOIN
        userinterests ui ON i.interestID = ui.interestID LEFT JOIN
        users u ON ui.userID = u.uiserID
WHERE userID = ? 

您要查找的用户ID在哪里。

答案 1 :(得分:0)

SELECT  * 
FROM    interests i 
LEFT JOIN  userinterests ui ON i.interestID = ui.interestID 
LEFT JOIN  users u ON ui.userID = u.uiserID 
and u.userID = ?  

如果将where条件放在一个不应该记录主表的表上,则将连接从左连接转换为内连接。只有当你搜索不匹配的记录(例如,u.userid为null)时,你应该在左边连接右边的某个地方遇到条件的唯一时间

当然你应该定义要选择的字段,并且永远不要在生产代码中使用select *,尤其是当你有一个连接时,因为它通过网络发送重复信息(重复数据连接领域)并且是浪费由于多种原因,资源和糟糕的编程实践。