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