首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mysql视图中选择数据

问从mysql视图中选择数据
EN

Stack Overflow用户
提问于 2017-11-13 05:38:04
回答 1查看 951关注 0票数 1

我有两个桌子,subscribed-channels和频道视频。我想要实现的是。从订阅频道中选择最多5个频道,然后从每个频道中选择最多4个视频.频道的位置需要根据他们的,最近上传的视频时间排序。下面的例子。

  • 第一频道-上传的最后一段视频是5天前。
  • 第二频道-最后一段视频是三天前上传的。
  • 第三频道-最后一段视频是一个小时前上传的。

这些频道在订阅- channels els.php页面中的位置如下所示:

  • 位置1(顶部)-通道3
  • 位置2-通道2
  • 位置3-通道1。

请指导我如何写这个查询。我尝试了什么:

代码语言:javascript
复制
SELECT
  usersubscriptions.*,
  uservideos.videoId,uservideos.videoThumbnail
FROM
  usersubscriptions
JOIN
  uservideos ON usersubscriptions.subscribedTo = uservideos.userId
ORDER BY
  uservideos.videoTime DESC,
  usersubscriptions.subscribedTo

我创建了连接,但无法限制数据或对其进行排序。

EN

回答 1

Stack Overflow用户

发布于 2017-11-13 07:17:59

您正在寻找"top n每类“(每个频道前4)解决方案。这比可能更困难,因为MySQL (如当前的5.7版本)一般都缺乏窗口函数,尤其是row_number()。不过,有一种解决办法是使用变量来模拟row_number()。

代码语言:javascript
复制
SELECT
       *
FROM (
      SELECT
            usersubscriptions.*
          , uservideos.videoId
          , uservideos.videoTime
          , uservideos.videoThumbnail
          , @rn := IF(@prev = usersubscriptions.subscribedTo, @rn + 1, 1) AS rn
          , @prev := usersubscriptions.subscribedTo
      FROM usersubscriptions
      JOIN uservideos ON usersubscriptions.subscribedTo = uservideos.userId
      CROSS JOIN (SELECT @prev := NULL, @rn := 0) AS vars
      ORDER BY
            usersubscriptions.subscribedTo
          , uservideos.videoTime DESC
      ) d
WHERE rn <= 4
ORDER BY
      d.videoTime DESC
    , d.subscribedTo
LIMIT 20
;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47257707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档