【问题标题】:Query for retrieving most popular video检索最受欢迎视频的查询
【发布时间】:2013-11-05 12:52:40
【问题描述】:

我有一个表格,用于保存与视频及其喜好相关的信息。

所以我想获得最喜欢的videoid,我通过以下方式查询

选择 VideoId,count(LikeStatus) from Likes where Status='0' group by VideoId

我得到以下输出

工作正常,但我需要这个查询是嵌套查询,我的意思是

select title,desc from videos where videoID IN (select VideoId,count(LikeStatus) from Likes where Status='0' group by VideoId)

我知道子查询必须只返回一个字段,那还有什么好的方法吗?

【问题讨论】:

  • 为什么在子查询中需要第二个字段count(LikeStatus)?你想用主查询做什么?
  • 从主查询中我需要获取 20 20 条记录。我不想一次获取所有记录。就像主查询的 limit $start,20 一样

标签: mysql join self-join


【解决方案1】:

这样的?

SELECT *
FROM   Videos
 INNER
  JOIN (
        SELECT VideoId
             , Count(*) As number_of_likes
        FROM   Likes
        WHERE  Status = '0'
        GROUP
            BY VideoId
       ) As likes
    ON likes.VideoId = Videos.VideoId

【讨论】:

    【解决方案2】:

    如果我理解得很好,你尝试做下面的代码(?)

    SELECT title,desc 
    FROM videos V
    LEFT JOIN Likes L ON V.id = L.VideoId
    
    WHERE (select count(LikeStatus) from Likes DL where DL.Status='0' AND DL.VideoId = V.id group by DL.VideoId) > 0
    
    GROUP BY V.id
    
    ORDER BY (select count(LikeStatus) from Likes DL where DL.Status='0' AND DL.VideoId = V.id group by DL.VideoId) DESC
    

    我说的对吗?

    【讨论】:

    • 抱歉,我现在无法测试,因为我的服务器已关闭。我测试后会尽快通知您
    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多