我有两个桌子,subscribed-channels和频道视频。我想要实现的是。从订阅频道中选择最多5个频道,然后从每个频道中选择最多4个视频.频道的位置需要根据他们的,最近上传的视频时间排序。下面的例子。
这些频道在订阅- channels els.php页面中的位置如下所示:
请指导我如何写这个查询。我尝试了什么:
SELECT
usersubscriptions.*,
uservideos.videoId,uservideos.videoThumbnail
FROM
usersubscriptions
JOIN
uservideos ON usersubscriptions.subscribedTo = uservideos.userId
ORDER BY
uservideos.videoTime DESC,
usersubscriptions.subscribedTo我创建了连接,但无法限制数据或对其进行排序。
发布于 2017-11-13 07:17:59
您正在寻找"top n每类“(每个频道前4)解决方案。这比可能更困难,因为MySQL (如当前的5.7版本)一般都缺乏窗口函数,尤其是row_number()。不过,有一种解决办法是使用变量来模拟row_number()。
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
;https://stackoverflow.com/questions/47257707
复制相似问题