【发布时间】:2011-06-23 18:10:50
【问题描述】:
这是正确的做法吗?
$query = 'SELECT * FROM gameids ORDER BY timestamp RAND LIMIT 1';
【问题讨论】:
这是正确的做法吗?
$query = 'SELECT * FROM gameids ORDER BY timestamp RAND LIMIT 1';
【问题讨论】:
RAND 是一个函数,它在大表中无效,因为它不使用索引。
$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1';
一种可能的解决方案是添加名为random 的列,并在每条记录上为其生成随机数,然后当您查询数据库时,按此列排序,您将获得伪随机数,但这次使用索引.
$query = 'SELECT * FROM gameids ORDER BY timestamp, random LIMIT 1';
编辑:
您还可以通过应用像 RAND() * MAX(numeric_column_name) 这样的表达式使 RAND() 更“灵活”
如果您对优化感兴趣,请查看这篇博文:http://jan.kneschke.de/projects/mysql/order-by-rand/
@Marwelln 是正确的。
【讨论】:
您不需要告诉它要随机化哪一列,但您确实需要在RAND 之后使用(),因为它是一个函数。
SELECT
*
FROM
gameids
ORDER BY
RAND()
LIMIT 1
【讨论】:
不正确。如果你想让它随机化,你不能按列排序(afaik)。
$query = 'SELECT * FROM gameids ORDER BY RAND() LIMIT 1';
【讨论】:
rand - rand() 是一个函数。