2013-11-14 103 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