首页 > 解决方案 > 具有混合选择行顺序的 Sql 查询

问题描述

我有一张如下所示的表格:

| id | group_id | title |
-------------------------
| 1  | 1        | Hello |
| 2  | 1        | World |
| 3  | 2        | Foo   |
| 4  | 2        | Bar   |

我的查询可能如下所示返回上面的结果:

SELECT * FROM my_table ORDER BY id

问题

如何订购此表,以便组 ID 看起来是随机的,但每次执行查询时仍然相同。

可能的结果示例

这个结果看起来是随机的。如果我一周后运行相同的查询,我希望看到完全相同的顺序,这意味着它不是真正随机的。

| id | group_id | title |
-------------------------
| 2  | 1        | World |
| 4  | 2        | Bar   |
| 1  | 1        | Hello |
| 3  | 2        | Foo   |

可能吗?

标签: mysqlsqlrandom

解决方案


如何利用模函数为您服务。

SELECT * FROM my_table ORDER BY id % 3,id

定义一个与模函数一起使用的值(在我的示例 3 中)并按 id 的模对表进行排序。这应该在您每次运行查询时返回相同的顺序并返回一些伪随机顺序。

由于模函数可以为不同的 id 返回相同的值,因此您还需要按原始 id 进行排序,以获得已定义的、可重现的顺序。


推荐阅读