2013-11-14 3 views
0

나는 posts 테이블을 가지고 있습니다. 나는 통해 votes 테이블로 참여하고있다 :JOIN/GROUP BY를 사용할 때의 MySQL 케이스

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 WHEN 조건이 단지의 경우 임의의 반환 값을 사용하기 때문에 이것은 분명히 작동하지 않습니다. 조인 값 그룹별로 특정 값이 들어 있는지 알아낼 방법이 있는지 궁금합니다.

명확히하기 : 을 내가 그때는 0을 소중히하는 모든 게시물 싶어하고, 각 게시물에 대한 게시물 ID 1 사용자에 의해 선정 된 경우 voted_by_me라는 열이, 그렇지 않으면 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 
관련 문제