たとえば、1000人のユーザーのデータベースを取得し、20人のランダムなユーザー(ORDER BY Rand()
、_LIMIT 20
_)を選択して、結果セットを名前で並べ替えます。 notが期待どおりに動作する次のクエリを思いつきました。
SELECT * FROM users WHERE 1 ORDER BY Rand(), name ASC LIMIT 20
サブクエリを使用します。
SELECT * FROM
(
SELECT * FROM users ORDER BY Rand() LIMIT 20
) T1
ORDER BY name
内部クエリは20人のユーザーをランダムに選択し、外部クエリは選択したユーザーを名前順に並べ替えます。
サブクエリを使用する代わりに、2つの個別のクエリを使用して、1つは行数を取得し、もう1つはランダムな行を選択します。
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;
パフォーマンスと結果のため、ORDER BY Rand()に注意してください。この記事をチェックしてください: http://jan.kneschke.de/projects/mysql/order-by-Rand/
SELECT *
FROM (
SELECT *
FROM users
WHERE 1
ORDER BY
Rand()
LIMIT 20
) q
ORDER BY
name
サブクエリを使用します。
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