2016-03-19 3 views
1

SQL beginner here。他のテーブルの投票数が基準を満たしているカウントレコード

私は2つのテーブル、コメント、投票を持っています。私はcomments.idとvotes.commentidを持っているので、コメントに投票を付けることができます。

のテーブルが含まれています comments.id comments.text

votes.commentid(REF comments.id) votes.vote(1または-1)

だから人々は、コメントを作成し、他の人々はそれらに投票する。人々は彼らの投票を変更する場合は、その一人一人が一度だけ投票することができ票テーブルに反映するので、何の質量upvoting/downvotingはありませんだ、など


私は何をしようとしていると、そのすべてのコメントをフェッチ負の票の25%未満を持っています。私はこのクエリを書く方法がわかりません。私が試してみるものは、単にSQLエラーです。

だから基本的に私は

select text from comments 
where 
count(where votes.commentid=comments.id AND votes.vote<0) < 
(count(where votes.commentid=comments.id AND votes.vote>0)*.25) 

(ここでは私の恐ろしいSQL恩赦)のような何かをしたいので、私は私のSQLの理解の私の限界まですべてを試してみましたが、私は作品の構文を見つけることができません。手伝ってくれますか?

答えて

0

これを試してみてください:作品

SELECT text FROM (SELECT commentid, SUM(IF(vote > 0, 1, 0)) AS pos_votes, 
SUM(IF(vote < 0, 1, 0)) AS neg_votes FROM votes GROUP BY commentid) AS vote_count 
INNER JOIN comments ON comments.id = vote_count.commentid WHERE 
(neg_votes * 100/(neg_votes + pos_votes)) <= 25 
+0

を!しかし、どのくらいのクエリの獣!コメントテーブルが最大10〜20,000になると、どのように速度が向上しますか? – Raptisoft

+0

簡単な答え:インデックス。複雑な答え:おそらく一時的なテーブル、おそらくビュー。 –

+0

さて、私ができることの1つは、誰でも投票するといつでもコメントテーブルのブール値を更新することです。投票が行われるたびに、そのブール値が設定されるか、または設定されなくなり、負荷を分散するのに役立ちます。クエリはちょうど "このブール値セットです。" – Raptisoft

関連する問題