【问题标题】:mysql query extract multiple records with one querymysql查询一次查询提取多条记录
【发布时间】:2013-04-08 13:06:53
【问题描述】:

这是我的桌子

id | question | 

id 被分组为

1000 -> 1050
2000 -> 2030
3000 -> 3099
4000 -> 4500
5000 -> 5010

我必须为每组 id 提取 5 条记录。

如何只用一个查询来执行此操作?

非常感谢。

【问题讨论】:

  • 你能提供这方面的样本记录吗?
  • 最简单的解决方案:五个查询,每个查询从给定范围之一中选择一个(随机?)值,并通过UNION 将它们组合成一个结果集。
  • @CBroe 谢谢,所以有没有可能只用一个查询来做到这一点?
  • @Vyktor 这不是重复的问题!
  • @michele 哪方面不重复?

标签: php mysql sql


【解决方案1】:
SELECT f1, f2, ... FROM tablename WHERE id BETWEEN 1000 AND 1050 ORDER BY RAND() LIMIT 1
UNION
SELECTS f1, f2, ... FROM tablename WHERE id BETWEEN 2000 AND 2030 ORDER BY RAND() LIMIT 1
UNION
SELECTS f1, f2, ... FROM tablename WHERE id BETWEEN 2000 AND 2030 ORDER BY RAND() LIMIT 1

还有两个用 UNION 选择

【讨论】:

    【解决方案2】:
    SELECT *, IF (id > 1000 AND id < 1050, 1, 
              IF (id > 2000 AND id < 2030, 2,
              IF (id > 3000 AND id < 3099, 3,
              IF (id > 4000 AND id < 4500, 4,
              IF (id > 5000 AND id < 5010, 5, 0))))) AS param 
    FROM questions WHERE param > 0 GROUP BY param
    

    【讨论】:

      【解决方案3】:

      要做到这一点,只需一个查询(不使用NedretRecap 建议的UNION),您可以将group_id(或类似列)添加到您的表中并使用简单的... GROUP BY group_id

      假设保留的组大小始终相同(某些组不可能从以前的+1000 开始,而另一些则从+300 开始)您可能可以使用这个简单的技巧:

      SELECT id
      FROM table
      GROUP BY FLOOR(id/1000)
      

      工作示例here

      【讨论】:

        猜你喜欢
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 2021-09-22
        • 2020-12-31
        • 2020-12-24
        相关资源
        最近更新 更多