【发布时间】:2014-05-10 20:46:04
【问题描述】:
我目前有一个无限滚动,当用户到达页面底部时,它会打印数据库行块。
我想做的是打乱整个数据库,以便用户每次加载页面时都以不同的顺序获取它们(但没有条目出现两次)。
这个表只会增长,所以我想尽可能高效地完成它。
我的查询目前是:
mysqli_query($con, "SELECT * FROM shopaholic ORDER BY RAND() LIMIT 36");
这有两个明显的缺点:
- 很容易重复行,因为它每次都从整个表中挑选行
- 它正在使用
RAND(),所以它会很慢
我该如何以更好的方式解决这个问题?
如果您需要查看其他相关代码,请告诉我。
【问题讨论】:
-
您正在随机排序。您要么必须创建一个伪随机订单,要么存储在客户端查看过的记录,如果您有很多很多,您可能会遇到客户端减慢或达到本地存储大小限制的问题记录。
-
我可以接受伪随机 - 我该怎么做?
-
这是一个组合 P=NP 问题,计算成本可能很高 - 您最好的办法是预先生成一组随机显示,并使其对最终用户显得随机。否则,en.wikipedia.org/wiki/Fisher-Yates_shuffle
-
伪随机意味着您实际上会事先生成订单,然后从该列表中翻页。