2010-11-19 83 views
0

我對SQL很陌生,找不到解決方案來解決我的問題。我有兩張桌子。在表A中,我存儲了很多評論,每個評論都有一個唯一的ID。MySQL,需要選擇在另一個表中具有最頻繁值的行

在表B中,我將存儲每個投票(如= 1和不喜歡= 0)的每個評論與日期時間。每個投票都會有一個條目,因此表A中的每條評論都會有很多行。

我需要檢索所有評論並對它們進行排序,以使每週最喜歡的評論位於頂部,但是我不知道如何。

這裏是我到目前爲止,但不知道如何繼續:

SELECT * FROM comment INNER JOIN logs ON comment.c_id=logs.c_id WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) AND logs.rated=1 

爲了澄清,我需要從日誌中的所有條目額定= 1在過去一週和最對它們進行排序頻繁的c_id以降序排列,並且每行得到不同的c_id ...如果這很有意義

如果我沒有說清楚的話,請提出問題,謝謝!

回答

1
SELECT * 
     FROM comment 
INNER JOIN (SELECT comment.c_id, 
        COUNT(*) AS cnt 
       FROM comment 
     INNER JOIN logs ON comment.c_id=logs.c_id 
      WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) 
       AND logs.rated=1 
      GROUP BY comment.c_id) x ON x.c_id = comment.c_id 
    ORDER BY x.cnt DESC 
+0

'FROM comment'後面多出一個逗號 – Unreason 2010-11-19 09:49:59

+0

@Unreason:已修復,謝謝 – zerkms 2010-11-19 10:47:11

+0

真棒,非常感謝! – Cody 2010-11-20 23:29:12

-1

試試這個 -

我已經第一次查詢原木表中的所有記錄被評爲1,並從當前日期7天,也是基於C_ID的計數是有序的。然後加入到COmments表中。

SELECT Comment.* FROM comment C 
INNER JOIN (SELECT logs.c_id as c_id,count(logs.c_id) as logcount FROM logs 
WHERE logs.rated=1 
AND logs.daterate BETWEEN GETDATE() AND DATEADD(day,-7,getdate()) 
Group by logs.c_id 
order by count(logs.c_id) desc) X 

ON C.c_id = X.c_id 
ORDER BY X.logcount DESC 
+0

-1這是SQL服務器的MySQL沒有標籤;在標準兼容的SQL – Unreason 2010-11-19 09:48:40

+0

中,'count()'需要'group by'編輯。謝謝。 – pavanred 2010-11-19 10:44:55

相關問題