如何解决分页范围的随机顺序
| 我正在尝试弄清楚如何创建一个范围,该范围将返回随机ActiveRecords,同时还支持will_paginate。 现在,每个页面视图都会获得完全不同的ActiveRecord随机集。因此,每个分页链接实际上只是另一组随机记录。 如何设置范围,使其成为通过分页保留的随机顺序? 我猜我需要某种基于时间的种子吗?解决方法
我猜想您在SQL中使用“ 0”来获取随机顺序。如果是这样,则可以为随机数生成器提供种子:
RAND(),RAND(N)
[...]如果指定了常量整数参数N,它将用作种子值,这将产生可重复的列值序列。
因此,您只需要选择一个种子(甚至可以通过在Ruby代码中使用seed = rand(1e6)
或类似的东西)并在会话中跟踪该种子。然后,对于下一页,将种子从会话中拉出,并将其提供给MySQL的RAND
函数。
请记住,ORDER BY RAND()
(带或不带种子)并不是地球上最便宜的操作。如果您的可搜索表很小,则可以生成一个由一堆列组成的表,用随机数填充(可能由ѭ3generated生成),然后将该表加入其中以按顺序提供您的随机序列。通过从随机数表中选择不同的列,可以为不同的查看者提供不同的序列:对于一个用户,您可以按随机数表/矩阵的第11列进行排序,而另一位用户将使用第23列。请记住,这些表(带有主键)实际上只是有限域上的函数(反之亦然),因此您选择的通常只是实现细节。使用表实现RAND
通常很麻烦,但我想还是要提到该选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。