2013-11-14 3 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. Очевидно, что это не работает, потому что он будет использовать только случайное возвращаемое значение в случае, когда состояние. Мне интересно, есть ли способ узнать, содержит ли группа значений join определенное значение.

Для уточнения: Я хочу, чтобы все сообщения, а также для каждой должности есть столбец voted_by_me где, если сообщения были признано пользователем с идентификатором 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 
Смежные вопросы