MySQL データベースを使用する場合、多くの場合、特定の順序を確保しながらデータのサブセットを取得する必要があります。一般的なシナリオの 1 つは、ユーザーなどのレコードのランダムなサンプルを選択し、名前などの特定の属性に基づいて結果をさらに整理することです。
達成するための最初の試みこれは、次のクエリを使用することになります:
<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>
ただし、rand() 関数はデータセット全体をランダムに並べ替えるため、このクエリでは期待した結果が得られない可能性があり、その後の名前の ASC 順序は保証されません。
名前ベースの並べ替えを確実にしながらランダム化を効果的に達成するには、サブクエリ アプローチが推奨されます。
<code class="sql">SELECT * FROM ( SELECT * FROM users ORDER BY rand() LIMIT 20 ) T1 ORDER BY name </code>
このクエリでは、最も内側のサブクエリ ( SELECT * FROM users ORDER BY rand() LIMIT 20) は、20 人のユーザーのランダムなサンプルを選択します。 LIMIT 20 句は、20 行のみが返されることを保証します。
その後、外側のクエリは、T1 で示されるサブクエリの結果を入力として使用します。 ORDER BY name 句を適用して、サブクエリの結果を名前の昇順に整理します。これにより、初期選択のランダム性と目的の名前ベースの並べ替えが効果的に組み合わされます。
このサブクエリ アプローチを採用することで、ユーザーのランダムなサンプルを取得し、意図したとおりに名前に基づいてアルファベット順に並べ替えることができます。
以上がMySQL でランダム選択と名前ベースの並べ替えを組み合わせるには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。