2013-11-14 102 views
0

我有一個posts表。我通過與votes表連接它:MySQL使用JOIN/GROUP BY時的情況

SELECT posts.*, 
     (CASE 
      WHEN vs.user_id = 1 THEN 0 
      ELSE 1 
     END) AS voted_by_me 
FROM `posts` 
LEFT OUTER JOIN votes AS vs ON vs.post_id = posts.id 
GROUP BY posts.id 

基本上我想知道,如果業增加值vs.user_id = 1。這顯然是行不通的,因爲它會在CASE WHEN條件只是使用一個隨機返回的值。我想知道是否有辦法找出連接值組是否包含特定值。

澄清: 我想獲得的所有帖子,同時還爲每個崗位有一個名爲voted_by_me列其中,如果帖子是由用戶ID爲1投票,然後使它的價值爲0,否則爲1

回答

0

這就是你想要的嗎?

SELECT posts.id, 
     sum(vs.user_id = 1 AND vs.option = 0) > 0 AS downvoted_by_me, 
     sum(vs.user_id = 1 AND vs.option = 1) > 0 AS upvoted_by_me 
FROM `posts` 
LEFT OUTER JOIN votes AS vs ON vs.post_id = posts.id 
GROUP BY posts.id 
0
SELECT posts.id, 
     ifnull(vs.isvoted, 0) AS voted_by_me 
FROM `posts` 
LEFT OUTER JOIN (select distinct postid , 1 as isvoted from votes where user_id=1) AS vs 
ON vs.post_id = posts.id