ホームページ > データベース > mysql チュートリアル > MySQL で UNION を使用した後、結果をカテゴリ内で並べ替えるにはどうすればよいですか?

MySQL で UNION を使用した後、結果をカテゴリ内で並べ替えるにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-11 11:43:44
オリジナル
618 人が閲覧しました

How Can I Sort Results Within Categories After Using UNION in MySQL?

MySQL で UNION クエリの結果を並べ替える

MySQL で UNION 演算子を使用して複数のデータ ソースからのデータを処理する場合、特に結果を特定のカテゴリ内で並べ替える必要がある場合、結果の並べ替えに問題が発生する可能性があります。この問題は通常、さまざまな基準 (検索クエリの距離フィルタリングなど) に基づいて 1 つのテーブルからデータを抽出するときに発生します。

問題の説明

指定されたシナリオでは、3 つの個別のクエリが異なる距離条件に基づいてデータを抽出します。

  1. 完全一致検索
  2. 距離5キロ以内
  3. 距離は 5 ~ 15 キロメートル以内

次に、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 で、idadd_date、および distance 列が含まれていることを前提としています。 実際のテーブル構造と条件に基づいて適切に調整してください。

以上がMySQL で UNION を使用した後、結果をカテゴリ内で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート