MySQL ORDER BY rand(),名称为ASC

Jos*_*h K 40 php mysql database random select

我想拿一个数据库说,1000个用户,然后选择20个随机的(ORDER BY rand(),LIMIT 20)然后按名称排序结果集.我想出了这是下面的查询工作像我希望的.

SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20

Mar*_*ers 60

使用子查询:

SELECT * FROM 
(
    SELECT * FROM users ORDER BY rand() LIMIT 20
) T1
ORDER BY name 
Run Code Online (Sandbox Code Playgroud)

内部查询随机选择20个用户,外部查询按名称对所选用户进行排序.

  • @Josh K:关于你的第一个问题,它被称为别名.如果省略它,则会出现以下错误:`每个派生表必须有自己的别名`. (5认同)
  • 真棒,两件事.为什么查询后的`T1`,它的目的是什么?第二:你知道在datamapper中是否可以使用子查询? (4认同)

irc*_*ell 10

因为性能和结果而要小心ORDER BY RAND().查看这篇文章:http://jan.kneschke.de/projects/mysql/order-by-rand/


Siq*_*Lin 9

您可以使用两个单独的查询,一个用于获取行数,另一个用于选择随机行,而不是使用子查询.

SELECT COUNT(id) FROM users; #id is the primary key
Run Code Online (Sandbox Code Playgroud)

然后,随机获得20行.

$start_row = mt_rand(0, $total_rows - 20);
Run Code Online (Sandbox Code Playgroud)

最后的查询:

SELECT * FROM users ORDER BY name ASC LIMIT $start_row, 20;
Run Code Online (Sandbox Code Playgroud)

  • 你总是会得到20个连续用户(关于他们的名字"连续"),而不是20个随机用户. (4认同)