【问题标题】:MySQL query for finding the most liked video this monthMySQL 查询查找本月最喜欢的视频
【发布时间】:2013-09-14 12:06:14
【问题描述】:

我有一个歌曲表,每首歌曲都有一个唯一的 ID 和发布日期

id | name | pub_date

还有一个包含喜欢的表格,其中包含视频 id、用户 id 以及上传视频 id 的用户:

song_id | user_id | songuser_id

我需要做的查询是找出当月上传的 10 个最喜欢的视频。这是我目前所拥有的:

SELECT songs.id, songs.name, songs.pub_date, COUNT(likes.song_id) as likecount 
FROM `songs` INNER JOIN `likes` on songs.id = likes.song_id
WHERE MONTH(CAST(songs.pub_date as date)) = MONTH(NOW()) 
AND YEAR(CAST(songs.pub_date as date)) = YEAR(NOW()) 
ORDER BY likecount DESC LIMIT 5

但我似乎只返回 1 个结果。我认为我遇到的问题与对喜欢的分组有关,但我无法弄清楚。任何帮助将不胜感激。

谢谢,詹姆斯。

【问题讨论】:

    标签: mysql join group-by


    【解决方案1】:

    您需要有 GROUP BY 子句,因为您聚合了 SELECT 子句中的列,

    SELECT..
    FROM...JOIN...
    WHERE...
    GROUP BY songs.id, songs.name, songs.pub_date
    ORDER BY...
    LIMIT...
    

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 DISTINCT/GROUP?

      SELECT 
         songs.id, songs.name, songs.pub_date, COUNT(likes.song_id) as likecount
      FROM
         songs
      INNER JOIN likes ON likes.song_id = songs.id
      WHERE
         MONTH(CAST(songs.pub_date as date)) = MONTH(NOW()) 
         AND 
         YEAR(CAST(songs.pub_date as date)) = YEAR(NOW()) 
      GROUP BY
         songs.id  
      ORDER BY
         likecount DESC 
      LIMIT 5
      

      【讨论】:

        猜你喜欢
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多