web-dev-qa-db-ja.com

MySQL ORDER BY Rand()、名前ASC

たとえば、1000人のユーザーのデータベースを取得し、20人のランダムなユーザー(ORDER BY Rand()、_LIMIT 20_)を選択して、結果セットを名前で並べ替えます。 notが期待どおりに動作する次のクエリを思いつきました。

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

38
Josh K

サブクエリを使用します。

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

内部クエリは20人のユーザーをランダムに選択し、外部クエリは選択したユーザーを名前順に並べ替えます。

59
Mark Byers

サブクエリを使用する代わりに、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;
9
Siqi Lin

パフォーマンスと結果のため、ORDER BY Rand()に注意してください。この記事をチェックしてください: http://jan.kneschke.de/projects/mysql/order-by-Rand/

9
ircmaxell
SELECT  *
FROM    (
        SELECT  *
        FROM    users
        WHERE   1
        ORDER BY
                Rand()
        LIMIT 20
        ) q
ORDER BY
        name
2
Quassnoi

サブクエリを使用します。

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