MySQL可预测的随机顺序

时间:2018-09-24 19:34:54

标签: mysql sql random random-seed

我无法解决这个问题,我感到非常惊讶。

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

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

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

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

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

  • 数据库中使用了附加内存。
  • 它不适用于多个用户,因为我需要为每个用户单独列出一列。

我必须考虑一下,但是我可以肯定,这里有一个聪明的解决方案,不需要我在数据库中添加额外的列。有没有其他人遇到过做这样的事情的需要?

2 个答案:

答案 0 :(得分:0)

如前所述,您可以提供种子来生成随机数序列。用于生成随机数的算法针对相同的种子数返回相同的数字序列。例如;

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

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

希望有帮助。

答案 1 :(得分:0)

我强烈建议您使用其中一列来生成数字:

select t.*
from t
order by rand(t.id);

这假设id是一个整数。您可以通过调整种子rand(t.id + 1)来获得不同的顺序。