MySQL で union 句と order by 句を使用する 質問する

MySQL で union 句と order by 句を使用する 質問する

MySQL クエリで、order by を union とともに使用したいと考えています。サイトでの検索のために、距離に基づくテーブルからさまざまな基準に基づいてさまざまな種類のレコードを取得しています。最初の選択クエリは、正確な場所の検索に関連するデータを返します。2 番目の選択クエリは、検索した場所から 5 km 以内の距離に関連するデータを返します。3 番目の選択クエリは、検索した場所から 5 ~ 15 km 以内の距離に関連するデータを返します。

次に、すべての結果を結合してページング付きのページに表示するために、unionを使用します。適切な見出しの下に「正確な検索結果」「5km以内の結果」

今、私は結果を id または add_date に基づいて並べ替えたいのですが、クエリの最後に order by 句を追加すると (query1 union query 2 union query 3 order by add_date)、すべての結果が並べ替えられます。しかし、私が望んでいるのは、各見出しの下で並べ替えることです。

ベストアンサー1

これを行うには、各選択に rank という名前の疑似列を追加し、最初にその列で並べ替えてから、他の基準で並べ替えます。例:

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
) a
order by rank, id, add_date desc

おすすめ記事