2011-01-05 5 views
1

Я хочу иметь только запрос с 2 запросами, но я не знаю, как начать ... Мои запросы подсчитывают положительные/отрицательные голоса для комментария.Запрос группы sql

SELECT COUNT(id) AS votes_no FROM comments_votes WHERE vote = 0 AND id_comment = 1 
SELECT COUNT(id) AS votes_no FROM comments_votes WHERE vote = 1 AND id_comment = 1 

Я поставил ВАР, чтобы положить отрицательным и позитивы голосов: $votes_no и $votes_yes

Тогда у меня есть конечный вар: $votes_calc = $votes_yes - $votes_no;

Как я могу получить количество votes_yes, votes_no и votes_calc лишь один запрос?

Большое спасибо!

+0

ли значение в столбце «голосования» всегда 0 или 1? – IvanGoneKrazy

+0

Как выглядит запрос vote_yes? Каково значение столбца «голос»? – galford13x

+0

@IvanGoneKrazy 1 или -1 @ galford13x Голос столбца является целым числом (1 или -1) – CrazyMax

ответ

2
select votes_no, votes_yes, votes_yes-votes_no as votes_calc 
from (select sum(case when vote = 0 then 1 else 0 end) as votes_no, 
      sum(case when vote = 1 then 1 else 0 end) as votes_yes 
     from comments_votes 
     where id_comment = 1) a 
2
select vote,count(id) 
from Comment_votes 
group by vote 
WHERE id_comment = 1 
with rollup 

с накопительным пакетом будет добавить строку со значением NULL в столбце голосов и общем во втором столбце

0

я сливаю запрос получают комментарии и комментарии голос, и кажется, работать :)

SELECT a.*, nb_votes, votes_yes-votes_no AS votes_calc 
FROM comments AS a 
LEFT JOIN (
    SELECT id_comment, COUNT(id) AS nb_votes, 
    SUM(CASE WHEN vote = 0 THEN 1 ELSE 0 END) AS votes_no, 
    SUM(CASE WHEN vote = 1 THEN 1 ELSE 0 END) AS votes_yes 
    FROM comments_votes GROUP BY id_comment 
) AS c ON (a.id = c.id_comment) 
WHERE a.status = 'approved' AND a.id_post = 1 ORDER BY a.time ASC 

Спасибо за ответы :)

Смежные вопросы