我想建一个数据库,比如1000个用户并选择20个随机的(ORDER BY rand()
,LIMIT 20
),然后按名称对结果集进行排序。我想出了以下查询, not 就像我希望的那样工作。
SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20
答案 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