【问题标题】:How we can get the data from the table by limiting the number of identical columns MySql我们如何通过限制相同列数MySql从表中获取数据
【发布时间】: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


【解决方案1】:

我不明白您的问题是 Transact-SQL 还是您的代码。

在 SQL 中,您可以使用“LIMIT”限制记录:https://www.w3schools.com/sql/sql_top.asp

在代码中,您可以使用条件 IF。

【讨论】:

  • 我只想使用 sql 请求,没有 if 在 php 代码中
  • 在 SQL 中:SELECT * FROM table LIMIT 0,2 提取最新的 2 结果。您可以使用 where 子句增加 SQL。例如:SELECT * FROM table WHERE user_id = 2 LIMIT 0,2
  • 我想为每个用户选择不超过两条记录
【解决方案2】:

假设您的 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(...) &lt; 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

【讨论】:

  • 我用的是旧的mysql,没有分区
  • @MykhailoK:那么您可能想查看被标记为与您的问题重复的链接,该链接为旧版本的 MySQL 提供了解决方案。
  • 对我不起作用,我可以理解这个 sql 查询
  • @MykhailoK:我用 MySQL 的查询更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2018-11-01
  • 2016-01-07
  • 2019-04-21
相关资源
最近更新 更多