【发布时间】:2020-01-14 03:24:03
【问题描述】:
昨天我尝试使用“user_id”作为标准从我的数据库表中检索数据,以限制每个用户的数据量。
我试图从表https://prnt.sc/p53zhp 中以https://prnt.sc/p541wk 之类的格式获取数据,并限制user_id 的输出记录数,其中limit 为2(count(user_id)
【问题讨论】:
标签: php sql sql-order-by sql-limit
昨天我尝试使用“user_id”作为标准从我的数据库表中检索数据,以限制每个用户的数据量。
我试图从表https://prnt.sc/p53zhp 中以https://prnt.sc/p541wk 之类的格式获取数据,并限制user_id 的输出记录数,其中limit 为2(count(user_id)
【问题讨论】:
标签: php sql sql-order-by sql-limit
我不明白您的问题是 Transact-SQL 还是您的代码。
在 SQL 中,您可以使用“LIMIT”限制记录:https://www.w3schools.com/sql/sql_top.asp
在代码中,您可以使用条件 IF。
【讨论】:
假设您的 RDBMS,这是一个解决方案,您只选择每个用户的前 2 条记录。您可以在子查询中使用ROW_NUMBER() 在具有相同user_id 的记录组中按id 对记录进行排名,并在外部查询中过滤掉不相关的记录,例如:
SELECT *
FROM (
SELECT
t.*,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY id)
FROM mytable
) x WHERE rn <= 2
在早期版本的 MySQL 上,您可以使用 self-LEFT JOIN 表并使用 GROUP BY 和 HAVING COUNT(...) < 2 将结果限制为每组的前两条记录:
SELECT
t.id,
t.user_id,
t.vip,
t.title,
t.description,
t.data
FROM mytable t
LEFT JOIN mytable t1 ON t1.user_id = t.user_id AND t1.id > t.id
GROUP BY
t.id,
t.user_id,
t.vip,
t.title,
t.description,
t.data
HAVING COUNT(t1.id) < 2
【讨论】: