2011-01-05 13 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 

私は否定と肯定票を入れてVARSを設定します。$votes_no$votes_yes

その後、私は最終的VAR持っている:私はだけでvotes_yes、votes_noとvotes_calcの数を取得できますか$votes_calc = $votes_yes - $votes_no;

を1つのクエリ?

ありがとうございます!

+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値と第2の列の合計行を追加します

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 

をあなたの答えてくれてありがとう:)