mysql可预测随机排序

5us2dqdw  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(778)

我很惊讶我搞不懂这个。
我现在正以一种随机的顺序从mysql输出一个表。我之所以这么说,是因为有一个公式部分依赖于rand()。在任何情况下,对于我的问题,我们可以假设顺序实际上是随机的。
这一切都是伟大的工作,除了我想保持相同的秩序为“会议”。我不希望它在积极使用数据的同时不断地跳转。我一直在想如何让mysql再次生成相同的序列。
我知道你可以做rand(n),其中n是一个种子,但据我所知,这将是完全相同的数字每次。所以基本上,如果我用它,就不会有任何随机因素。
我想要的是一种方法,我可以饲料种子到我的订单,并始终得到一个可靠的输出秩序。对于同一粒种子,我会得到相同的顺序,如果我投进不同的种子,那将是不同的随机顺序。
我能想到的最好办法是,我可以为每一行创建一个额外的带有rand的表单元格,并使用它进行排序。有几个问题:
数据库中使用了额外的内存。
它不适用于多个用户,因为我需要为每个用户提供一个单独的列。
我必须考虑一下这个问题,但我非常肯定这里有一个聪明的解决方案,它不需要我向数据库中添加额外的列。有没有其他人遇到过这样做的需要?

ujv3wf0j

ujv3wf0j1#

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

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

通过这样做,您将始终对种子“1”具有相同的随机顺序。为了得到相同的结果,可以提供session id或类似的数字。
希望有帮助。

1tuwyuhd

1tuwyuhd2#

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

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

这是假设 id 是一个整数。你可以通过调整种子得到不同的排序, rand(t.id + 1) .

相关问题