2016-03-19 100 views
1

SQL初學者在這裏。計算其他表中計數的記錄符合條件

我有兩張表,評論和票。我有comments.id和votes.commentid,它讓我給選票添加評論。

該表格包含: comments.id comments.text

votes.commentid(REF comments.id) votes.vote(1或-1)

於是人們作出評論,和其他人們對他們投票。如果人們改變他們的投票,這也反映在投票表,每人只能投票一次,所以沒有質量upvoting/downvoting等


我試圖做的是獲取所有評論認爲有不到25%的反對票。我不知道如何編寫這個查詢。我所做的任何嘗試都只是一個SQL錯誤。

所以基本上我想要做的事一樣(這裏原諒我的可怕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理解限制,我無法找到一個可行的語法。你能幫我嗎?

回答

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

那麼,我可以做的一件事就是在任何時候任何人投票時更新評論表中的布爾值......所以無論何時投票發生,布爾值被設置或取消設置,這可以幫助分配負載......自那時起查詢就是「是這個布爾集合。」 – Raptisoft