首页 > 解决方案 > MySQL 可预测的随机排序

问题描述

我很惊讶我无法弄清楚这一点。

我目前正在以某种随机顺序从 MySQL 输出一个表。我之所以这么说,是因为有一个公式部分依赖于 RAND()。无论如何,我们可以假设我的问题的顺序实际上是随机的。

这一切都很好,除了我想为“会话”保持相同的顺序。我不希望它在积极使用数据的同时不断跳来跳去。我一直在试图弄清楚如何让 MySQL 第二次生成相同的序列。

我知道你可以做 RAND(N) ,其中 N 是种子,但据我所知,每次都是完全相同的数字。因此,如果我使用它,基本上根本不会有随机因素。

我想要的是一种可以将种子输入我的 ORDER BY 并始终获得可靠输出订单的方法。对于相同的种子,我将得到相同的顺序,如果我喂入不同的种子,它将是不同的随机顺序。

我能想到的最好的办法是,我可以为每一行创建一个带有 RAND 的附加表格单元格,并将其用于排序。有几个问题:

我必须考虑这一点,但我很确定这里有一个聪明的解决方案,它不涉及我向数据库添加额外的列。有没有其他人遇到过需要做这样的事情?

标签: mysqlsqlrandomrandom-seed

解决方案


正如您所提到的,您可以提供一个种子来生成一系列随机数。生成随机数的算法为相同的种子数返回相同的数字序列。例如;

SELECT Rand(1) AS rnd, CustomerId, CustomerName FROM Customers ORDER BY rnd

通过这样做,您将始终对种子“1”具有相同的随机顺序。您可以提供会话 ID 或类似的数字以获得相同的结果。

希望能帮助到你。


推荐阅读