1. ホーム
  2. mysql

[解決済み] mysqlのunionとorder by句の使い方

2022-05-13 20:20:29

質問

mysqlのクエリでunionとorder byを使用したい。 私は私のサイトで検索するための距離に基づいてテーブルから異なる条件に基づいてレコードのさまざまなタイプをフェッチしています。 最初のselectクエリは、正確な場所の検索に関連するデータを返します。 2番目のselectクエリは、検索された場所から5キロメートル以内の距離に関連するデータを返します。 3番目のselectクエリは、検索された場所から5〜15キロメートル以内の距離に関連するデータを返します。

次に、私はすべての結果をマージし、ページングとページ上に表示するためにユニオンを使用しています。適切な見出しの下に '正確な検索結果' , '5キロメートル以内の結果' その他

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

どのように解決するには?

各セレクトにランクという疑似カラムを追加して、他の基準でソートする前に、まずランクでソートできるようにすることで、これを実現できます。

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