Jak*_*old 6 mysql database random ruby-on-rails
假设我有一堆包含大量记录的表,我想随机向用户呈现这些记录.我还希望用户能够来回分页,所以我必须坚持某种顺序,至少在一段时间内.
该应用程序基本上只是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 |
+------+
Run Code Online (Sandbox Code Playgroud)
请注意,rand()函数具有种子值(123).另请注意,如果重复最后三个查询,则每次都会得到相同的结果.
归档时间: |
|
查看次数: |
8656 次 |
最近记录: |