gpt4 book ai didi

mysql - 以 5 组返回特定​​ ID 的 SQL

转载 作者:行者123 更新时间:2023-11-30 22:41:30 25 4
gpt4 key购买 nike

我有 articles 表,其中包含 idcreated_by以及包含 idname

users

我需要编写 SQL 来为用户 1,2,3,4,5,6,... 检索 5 篇或更少的文章如果我使用 limit 5,它会将结果限制为 5 条记录,但我需要将每个特定用户的结果限制为 5。

我可以使用这样的东西:

(SELECT id, created_by FROM content where created_by = 1 limit 5) 
union
(SELECT id, created_by FROM content where created_by = 2 limit 5)

但我有大约 20 个用户,所以我认为效率不高。

最佳答案

您可以使用变量来模拟 ROW_NUMBER 窗口函数,这在 MySQL 中不可用:

SELECT ArticleId, UserId, UserName
FROM (
SELECT a.id AS ArticleId, u.id AS UserId, u.name AS UserName,
@row_number:= IF (@uid = u.id,
IF (@uid:=u.id, @row_number+1, @row_number+1),
IF (@uid:=u.id, 1, 1)) AS rn
FROM articles AS a
CROSS JOIN (SELECT @row_number:=0, @uid:=0) vars
INNER JOIN users AS u ON a.created_by = u.id
WHERE u.id IN (1, 2, 3, 4, 5, 6)
ORDER BY u.id, a.id ) t
WHERE t.rn <= 5

以上查询将为每个用户挑选前 5 篇文章(按照 articleId 排序)。如果用户的文章少于 5 篇,则选择该用户的所有文章。

注意嵌套条件的用法,以保证@uid首先读取并随后设置.

Demo here

关于mysql - 以 5 组返回特定​​ ID 的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31030423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com