MySQL ORDER BY rand(),名称为ASC

时间:2010-05-21 13:55:40

标签: php mysql database select random

我想建一个数据库,比如1000个用户并选择20个随机的(ORDER BY rand()LIMIT 20),然后按名称对结果集进行排序。我想出了以下查询, not 就像我希望的那样工作。

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

5 个答案:

答案 0 :(得分:57)

使用子查询:

SELECT * FROM 
(
    SELECT * FROM users ORDER BY rand() LIMIT 20
) T1
ORDER BY name 

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

答案 1 :(得分:10)

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

SELECT COUNT(id) FROM users; #id is the primary key

然后,随机获得20行。

$start_row = mt_rand(0, $total_rows - 20);

最终查询:

SELECT * FROM users ORDER BY name ASC LIMIT $start_row, 20;

答案 2 :(得分:9)

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

使用子查询:

SELECT * FROM (
    SELECT * FROM users ORDER BY RAND() LIMIT 20
) u
ORDER BY name

或加入自身:

SELECT * FROM users u1
INNER JOIN (
    SELECT id FROM users ORDER BY RAND() LIMIT 20
) u2 USING(id)
ORDER BY u1.name