Mysql 1随机行

时间:2011-02-08 21:48:33

标签: php mysql

  

可能重复:
  How to request a random row in SQL?

这是正确的方法吗?

$query = 'SELECT * FROM gameids ORDER BY timestamp RAND LIMIT 1';

3 个答案:

答案 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是对的。