2014-10-16 38 views
0

我在使用MySQL中的某些条件从多个表中获取数据时遇到了问题。从mysql中的多个表中返回多个条件的数据

我已经follwing三个表:

Like Table 

    Like_id photoID userID 
     1  1  1 
     2  2  2 
     3  2  1 


    BookMark Table 

    bookmark_id photoID userID 
      1  1  1 
      2  2  2 
      3  2  1 


    Users Table 

    User_id Name  Email 
     1 Max B  [email protected] 
     2 Tom Smith [email protected] 

条件:

起初,我要检查是否有从用户id = 2。如果没有在LIKE表中的任何数据数据应该返回“false”,否则应该返回“true”。

同样,我想检查是否有任何数据从BOOKMARK表userid = 2。如果没有数据它应该返回“false”,否则它应该返回“true”。

最后,我要来从用户表中的用户ID的姓名和电子邮件= 2

通缉:

我要实现所有这些信息在单个查询与上述三个表中的条件。

到目前为止已经试过与此查询:

select Like.Like_id from (Like left join Users on Like.userID = Users.User_id) 
    left join BookMark on Users.User_id = BookMark.bookmark_id 
    where Users.User_id = 2 

随着@Gervs建议:

SELECT 
u.user_id, 
u.name, 
u.email, 
(CASE WHEN ISNULL(l.user_id) THEN 'false' ELSE 'true' END) AS 'likes', 
(CASE WHEN ISNULL(b.user_id) THEN 'false' ELSE 'true' END) AS 'bookmarks' 
FROM 
users u 
LEFT JOIN 
    likes l 
    ON u.user_id = l.user_id 
LEFT JOIN 
bookmarks 
ON u.user_id = b.user_id 
WHERE u.user_id = 2 
GROUP BY u.user_id 

会是怎样获取这些信息的最简单而有效的单个查询? 对于这些条件,VIEW将是最佳选择吗?

先进的感谢您的参与。

+0

是的,这可以在一个完成查询。最简单的方法是将'LEFT JOIN' ** ** **添加到** Like **和** Bookmark **中,并将'NULL'解释为false。 – 2014-10-16 21:59:53

+0

@ PM77-1谢谢。你可以请写在MySQL查询? – techhunter 2014-10-16 22:00:52

+2

为什么至少不会尝试自己做? – 2014-10-16 22:02:01

回答

2

您可以在用户表上内联结像表和书签表,也就是说,如果只需要在两个表中都有条目的用户。

SELECT 
    u.user_id, 
    u.name, 
    u.email, 
    COUNT(l.user_id) likes, 
    COUNT(b.user_id) bookmarks 
FROM 
    users u 
JOIN 
    likes l 
    ON u.user_id = l.user_id 
JOIN 
    bookmarks b 
    ON u.user_id = b.user_id 
WHERE u.user_id = 2 
GROUP BY u.user_id 

如果你总是希望用户,只是改变了内连接到左连接和喜欢和/或书签将是零,如果没有找到任何条目

SELECT 
    u.user_id, 
    u.name, 
    u.email, 
    CASE WHEN COUNT(l.user_id) > 0 THEN 'true' ELSE 'false' END likes, 
    CASE WHEN COUNT(b.user_id) > 0 THEN 'true' ELSE 'false' END bookmarks 
FROM 
    users u 
LEFT JOIN 
    likes l 
    ON u.user_id = l.user_id 
LEFT JOIN 
    bookmarks b 
    ON u.user_id = b.user_id 
WHERE u.user_id = 2 
GROUP BY u.user_id 
+0

谢谢。你是否在说我编辑过的文章中写过类似的东西? – techhunter 2014-10-16 22:18:06

+0

不,这里有一个很大的差别,左边的左边加入了 – Gervs 2014-10-16 22:20:54

+0

Gervs ..many感谢您的帮助。如果您查看更新的查询,您可以看到我已经编辑了查询并进行了测试。它按我想要的完美运行。感谢你和@ PM77-1的帮助。 也将这个问题回答帮助别人?祝你有美好的一天。干杯 – techhunter 2014-10-16 23:30:36

相关问题