2011-09-29 90 views
0

我们有一个如此排列的表:ID,Album_ID和Time_Voted。每次用户投票时, 它创建一个新的记录。我们希望显示前五个Album_ID,(每周末有最多包含该Album_ID的记录)。我知道如何做到这一点的唯一方法是选择过去一周的所有记录,然后对结果运行“while”,然后遍历数组,并在每次找到一个数组并添加一个+1到对应的Album_ID键相同的Album_ID的实例。这是非常低效的,我相信有一个通过SQL查询来完成这个任务的好方法,但是这超出了我的知识水平。按照包含特定字段的记录数量的顺序选择记录

所以问题是,有没有办法通过查询获得每个album_ID数量的计数,然后按照这个计数来安排?

这是我正在使用的原始SQL语句。 YEARWEEK的东西只是上周才拿到的。

SELECT * FROM wp_album_votes WHERE YEARWEEK(Time_Voted) = YEARWEEK(CURRENT_DATE - INTERVAL 7 DAY) ORDER BY Album_ID 

回答

6
SELECT Album_ID, COUNT(*) AS NumVotes 
    FROM wp_album_votes 
    WHERE YEARWEEK(Time_Voted) = YEARWEEK(CURRENT_DATE - INTERVAL 7 DAY) 
    GROUP BY Album_ID 
    ORDER BY NumVotes DESC LIMIT 5 
+0

呸,你6秒:) –

+0

完美打我吧!如果我只能给出2个正确的答案!猜猜+1必须要做! – Cyprus106

1
select album_id, count(album_id) 
from wp_album_votes 
group by album_id 
order by 2 desc. 

你可以用其他文字和日期在这个基础结构...