2012-01-03 26 views
1

私は2つのテーブルがあります:私は(*)NEWS上のすべての値を選択する必要があります基本的なSQLクエリの例

NEWS (id, news_content) 
NEWS_VOTES (vote, news_id) 

を、そしてnews.idとnews_votes.new_idがどこにあるかもNEWS_VOTESテーブル上の投票を数えます同じ。

少し明確な説明は次のとおりです。

  1. 私はNEWSのテーブルの上にすべての値を選択します。
  2. "ID" の値に応じて、私はまた選択:

反対票:

SELECT count(*) FROM NEWS_VOTES WHERE news_id = (same ID) AND vote = 0 

ポジティブな投票:

SELECT count(*) FROM NEWS_VOTES WHERE news_id = (same ID) AND vote = 1 

を、私は単一のクエリでこれを行う必要があります。

ウェブサイトの出力は「このニュースは57の正の票と67の否定の票を得ました」のようになります。

ありがとうございます。

ps。私はMYSQLを使用します。正の票を想定し

+0

どのように否定と肯定の票を分けて伝えますか?彼らは同じクエリを使用しています! :-O –

+2

否定と肯定票は 'vote'と同じ値ですか? – Matten

+0

UNIONを試す... – duffymo

答えて

5

vote=1を持っている:

select 
    n.id, 
    n.news_content, 
    (select count(*) from news_votes where news_id=n.id and vote = 1) as positive_votes, 
    (select count(*) from news_votes where news_id=n.id and vote = 0) as negative_votes 
from news n 
+0

ありがとう。 :) – Aristona

3
SELECT n.id, n.news_content, 
     COUNT(v1.vote) AS negative, 
     COUNT(v2.vote) AS positive 
FROM news n 
LEFT JOIN news_votes v1 ON v1.news_id = n.id 
LEFT JOIN news_votes v2 ON v2.news_id = n.id 
HAVING v1.vote = 0 AND HAVING v2.vote = 1 
GROUP BY v1.news_id, v2.news_id 
ORDER BY id DESC 
1
select id, news_content, 
    coalesce(v.positive, 0) as positive, 
    coalesce(v.negative, 0) as negative 
from news n 
left join (
    select news_id, 
     sum(case when vote = 1 then 1 else 0 end) as positive, 
     sum(case when vote = 0 then 1 else 0 end) as negative 
    from news_votes 
    group by news_id 
) v on n.id = v.news_id 
1

はこのお試しください - 票= 1が正の票を意味し、投票= 0が負の投票を意味

SELECT 
    n.*, 
    COUNT(IF(nv.vote = 1, 1, NULL)) Positive_Votes, 
    COUNT(IF(nv.vote = 0, 1, NULL)) Negative_Votes 
FROM news n 
    LEFT JOIN NEWS_VOTES nv 
    ON nv.news_id = n.id 
GROUP BY 
    n.id 

を。

0

(news_id =(同じID)NEWS_VOTES SELECT COUNT(*)FROM AND = 0投票) を選択positive_votes、 (NEWS_VOTES news_id =(同じID FROM SELECT COUNT(*)を)AND = 1投票)negative_votesをデュアルからの ;

関連する問題