mysql - MySQL 可预测的随机排序
问题描述
我很惊讶我无法弄清楚这一点。
我目前正在以某种随机顺序从 MySQL 输出一个表。我之所以这么说,是因为有一个公式部分依赖于 RAND()。无论如何,我们可以假设我的问题的顺序实际上是随机的。
这一切都很好,除了我想为“会话”保持相同的顺序。我不希望它在积极使用数据的同时不断跳来跳去。我一直在试图弄清楚如何让 MySQL 第二次生成相同的序列。
我知道你可以做 RAND(N) ,其中 N 是种子,但据我所知,每次都是完全相同的数字。因此,如果我使用它,基本上根本不会有随机因素。
我想要的是一种可以将种子输入我的 ORDER BY 并始终获得可靠输出订单的方法。对于相同的种子,我将得到相同的顺序,如果我喂入不同的种子,它将是不同的随机顺序。
我能想到的最好的办法是,我可以为每一行创建一个带有 RAND 的附加表格单元格,并将其用于排序。有几个问题:
- 数据库中使用了额外的内存。
- 它不适用于多个用户,因为我需要为每个用户提供一个单独的列。
我必须考虑这一点,但我很确定这里有一个聪明的解决方案,它不涉及我向数据库添加额外的列。有没有其他人遇到过需要做这样的事情?
解决方案
正如您所提到的,您可以提供一个种子来生成一系列随机数。生成随机数的算法为相同的种子数返回相同的数字序列。例如;
SELECT Rand(1) AS rnd, CustomerId, CustomerName FROM Customers ORDER BY rnd
通过这样做,您将始终对种子“1”具有相同的随机顺序。您可以提供会话 ID 或类似的数字以获得相同的结果。
希望能帮助到你。
推荐阅读
- android - 设计师编辑器不可用 Android studio
- android - 即使调用 asyncTask().execute().get() 也会触发 onPostExecute() 吗?
- powershell - PS版本2的powershell Get-Content -raw替代品
- html - HTML/CSS div 悬停时超出父 div
- javascript - 在 Observable 上使用 await 时,我应该使用什么来代替 toPromise()?
- node.js - 无法读取 cookie 中未定义的属性“程序”?
- angular - Angular 5 - 检查服务器错误
- c# - C#获取xml文档中的所有节点但忽略嵌套节点
- postgresql - Postgres-xl 上的 PostGIS 扩展
- java - Jboss EAP 7.0.9 中的 RichFaces 4.3.7:IllegalStateException