如何随机排序所选行(真正)?

时间:2012-03-13 16:55:19

标签: php mysql random

目前,我在PHP脚本中使用此查询:

SELECT * FROM `ebooks` WHERE `id`!=$ebook[id] ORDER BY RAND() LIMIT 125;

数据库最多会有大约2500行,但我已经读过ORDER BY RAND()最终会减慢处理时间,因为数据库中的数据会增长。

所以我正在为我的查询寻找一种替代方法,使事情仍能顺利进行。

另外,我注意到ORDER BY RAND()并不是真正随机化行,因为我经常看到它遵循某种模式,有时会反复重复。

有没有任何方法可以真正随机化行?

2 个答案:

答案 0 :(得分:1)

RAND()函数是一个伪随机数生成器,如果你不用不同的值初始化它会给你相同的数字序列,所以你应该做的是:

SELECT * FROM `ebooks` WHERE `id`!=$ebook[id] ORDER BY RAND(UNIX_TIMESTAMP()) LIMIT 125;

将从当前时间播种随机数生成器,并为您提供不同的数字序列。

RAND()会减慢SELECT的{​​{1}}子句,因为它必须每次生成一个随机数,然后按它排序。我建议您将数据返回给调用程序,并使用类似array_rand的内容将其随机化。

答案 1 :(得分:1)