假设我有一个包含一堆记录的表,我想将这些记录随机呈现给用户。我还希望用户能够来回分页,所以我必须保持某种顺序,至少在一段时间内是这样。
该应用程序基本上只有 AJAX,它对已经访问过的页面使用缓存,所以即使我总是提供随机结果,当用户试图返回时,他也会得到上一个页面,因为它将从本地缓存加载.
问题是,如果我只返回随机结果,可能会有一些重复。每个页面包含 6 个结果,所以为了防止这种情况,我必须做一些类似 WHERE id NOT IN (1,2,3,4 ...)
的事情,我把所有以前的加载的 ID。
该解决方案的巨大缺点是无法在服务器端缓存任何内容,因为每个用户都会请求不同的数据。
替代解决方案可能是创建另一个列来对记录进行排序,并打乱它在此处插入时间单位。这里的问题是,我需要为表中的每条记录设置一个序列之外的随机数,这将需要与记录一样多的查询。
如果有任何相关性,我正在使用 Rails 和 MySQL。
最佳答案
试试这个:
mysql> create table t (i int);
mysql> insert into t values (1),(2),(3),(4),(5),(6);
mysql> select * from t order by rand(123) limit 2 offset 0;
+------+
| i |
+------+
| 6 |
| 4 |
+------+
mysql> select * from t order by rand(123) limit 2 offset 2;
+------+
| i |
+------+
| 2 |
| 3 |
+------+
mysql> select * from t order by rand(123) limit 2 offset 4;
+------+
| i |
+------+
| 5 |
| 1 |
+------+
请注意,rand() 函数有一个种子值 (123)。另请注意,如果您重复最后三个查询,每次都会得到相同的结果。
关于mysql - "shuffle"数据库记录表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610371/