紹介:
UNION と組み合わせた複数の SELECT ステートメントを使用してデータをクエリする場合、各クエリの独立性を維持しながら、結果をタイトルごとに適切に並べ替える必要があります。
質問:
1 つのシナリオは、3 つの SELECT クエリが Web サイト検索の異なる距離基準に基づいてデータを取得するというものです。最初のクエリは正確な位置検索用のデータを取得し、2 番目のクエリは 5 キロメートル以内のデータを取得し、3 番目のクエリは 5 ~ 15 キロメートル以内のデータを取得します。クエリ結果は UNION を使用して結合され、タイトル付きのページに表示されます。ただし、ユーザーは、id または add_date に基づいて各見出しの下で結果を並べ替えたいと考えています。
解決策:
これを実現するために、MySQL は各 SELECT ステートメントに「rank」という名前の疑似列を導入します。この疑似列を使用して、他の並べ替え基準を適用する前に結果を最初に並べ替えることができます。次の変更されたクエリは、このアプローチを示しています:
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM Table UNION ALL SELECT 2 AS Rank, id, add_date FROM Table WHERE distance < 5 UNION ALL SELECT 3 AS Rank, id, add_date FROM Table WHERE distance BETWEEN 5 AND 15 ) AS RankedResults ORDER BY Rank ASC, id DESC, add_date DESC;</code>
説明:
疑似列 "Rank": 各 SELECT ステートメントでは、「Rank」という名前の疑似列が導入され、一意の値 (1、2、および 3) が割り当てられます。この列は、結果の順序またはグループ化を表します。
「ランク」による初期ソート: UNION の結果は、最初は「ランク」列によって昇順にソートされます。これにより、結果がそれぞれのタイトル (「正確な結果」、「5 km 以内の結果」、および「5 ~ 15 km 以内の結果」) に従ってグループ化されます。
「id」と「add_date」による追加の並べ替え: 各グループ (「Rank」によって決定) 内で、結果はさらに「id」と「add_date」によって降順に並べ替えられます。
注:
このメソッドは UNION ALL 操作を使用し、結合された結果に重複する行が含まれます。重複する行が必要ない場合は、重複を排除する UNION 操作を使用できます。
以上がMySQL UNION クエリの別々のセクション内で結果を並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。