2014-10-16 44 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

相關問題