我有一个包含超过一百万条记录的数据库。我正在尝试以随机顺序获取记录。数据库中充满了图像的链接,每个图像都有一个唯一的编号。所以我应该能够为图片上的下一个和上一个按钮重新创建相同的“随机”顺序?
有没有办法提出一个查询并将其保存在 cookie 或会话中并重用它来重新生成我的随机订单?
总的来说,它是否有效,因为我不希望加载时间变长?
任何建议都很棒。
最简单的方法是,在数据库中放入另一列,正确索引它,并给它一个随机整数。然后你可以ORDER
把你的桌子放在上面,让它稳定。这将使所有用户具有相同但随机的顺序。
编辑:如果您希望每个用户都有自己的序列,这也很简单,正如 Alma Do 所说:
SELECT * FROM records ORDER BY RAND(17)
将始终具有相同的顺序(只要您不更改数据库),并且不同于
SELECT * FROM records ORDER BY RAND(2308)
但这不会很快。
我能想到的唯一选择会占用大量空间:当您为用户计算序列时,将其存储在表中。这将需要每个用户有一个包含数百万行的两列表。
根据 MySQL 手册页,您可以为RAND()函数指定参数,因此它将返回随机但可重复的序列:
如果指定了常量整数参数 N,则将其用作种子值,从而生成可重复的列值序列。
这意味着,您将能够有随机顺序,但在您的 prev-next 页面中仍然是相同的顺序。