MySQL で UNION クエリの結果を並べ替える
MySQL で UNION 演算子を使用して複数のデータ ソースからのデータを処理する場合、特に結果を特定のカテゴリ内で並べ替える必要がある場合、結果の並べ替えに問題が発生する可能性があります。この問題は通常、さまざまな基準 (検索クエリの距離フィルタリングなど) に基づいて 1 つのテーブルからデータを抽出するときに発生します。
問題の説明
指定されたシナリオでは、3 つの個別のクエリが異なる距離条件に基づいてデータを抽出します。
次に、UNION を使用してこれらの結果を結合し、適切な見出しの下に表示します (たとえば、「正確な結果」や「5 キロメートル以内の結果」)。ユーザーは ID または add_date に基づいて結果を並べ替えたいと考えていますが、マージ クエリの最後に ORDER BY 句を追加すると、タイトルで並べ替える必要がなく、すべての結果が全体的に並べ替えられます。
Rank 疑似列を使用したソリューション
結果をマージしながら各カテゴリ内で結果を並べ替えるために、各選択クエリに「Rank」と呼ばれる疑似列を導入できます。この列は、実際の条件で並べ替える前に並べ替えるために使用されます。次のコードは、このアプローチを示しています:
<code class="language-sql">SELECT * FROM ( SELECT 1 AS Rank, id, add_date FROM Table WHERE <精确匹配条件> 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 CombinedResults ORDER BY Rank, id DESC, add_date DESC;</code>
このクエリでは、Rank 疑似列が 3 つのクエリにそれぞれ 1、2、および 3 の値を割り当てます。 ORDER BY 句は、結果を最初に Rank で並べ替え、次に ID と add_date で降順に並べ替えます。このアプローチにより、カテゴリの区別を維持しながら、各見出し内の結果を並べ替えることができます。
<精确匹配条件>
は完全一致の検索条件に置き換える必要があることに注意してください。 このソリューションでは、テーブルの名前が Table
で、id
、add_date
、および distance
列が含まれていることを前提としています。 実際のテーブル構造と条件に基づいて適切に調整してください。
以上がMySQL で UNION を使用した後、結果をカテゴリ内で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。