DB でクエリを実行し、約 500 の結果を取得する演習を行っています。今、いくつかの条件に基づいてこのリストをソートし、ソートされたリストをクライアント側に表示したいと考えています。Java/Java EE と MySQL サーバー 5.5 を使用しています。条件は次のとおりです。例: 車がリストされているテーブルを考えてみましょう。テーブルに対してクエリを実行すると、約 500 台の車がリストされます。ここで、ユーザーの基準に基づいてこのリストを並べ替えたいと思います。条件は車の年式、車の色、車の設備です。リストは次のように並べ替える必要があります。最初に、3 つの条件すべてを満たす車のリストが表示されます。つまり、エンド ユーザーが言及したのと同じ年式で、同じ色で、ユーザーが選択したすべての設備を備えています。2 つ目は、車のリストを満たす 2 つの条件と満たさない 1 つの条件のいずれかです。3 番目は、cars リストを満たすいずれか 1 つの条件が表示され、他の 2 つは表示されません。
どうすればこれを達成できますか。私はグーグルで検索し、これに関してircチャンネルで尋ねました。何の助けも得られませんでした。CASES を定義して RANK 関数を使用し、最後に RANK で並べてみました。条件フィールド(列)が同じテーブルのものである間、それは私にとってはうまくいきます。私の場合、フィールドは親テーブルと、親と多対1の関係を持つ子テーブルからのものです。この例のように、車の年式と色は親テーブルに格納され、車が持つ設備は別のテーブルに格納されます。内部結合を使用して同じことを試みましたが、うまくいきませんでした。
私はこのようなことを試しました:
クエリ:
select distinct t0.id,t0.name,t0.price,
CASE
WHEN
t1.age='2' AND t1.colour='Red' AND t2.facilities_id=9 THEN 1
WHEN
t1.age='2' AND t1.colour='Red' AND t2.facilities_id!=9 THEN 2
WHEN
t1.age='2' AND t1.colour!='Red' AND t2.facilities_id=9 THEN 3
WHEN
t1.age!='2' AND t1.colour='Red' AND t2.facilities_id=9 THEN 4
WHEN
t1.age!='2' AND t1.colour='Red' AND t2.facilities_id!=9 THEN 5
WHEN
t1.age='2' AND t1.colour!='Red' AND t2.facilities_id!=9 THEN 6
WHEN *
t1.age!='2' AND t1.colour!='Red' AND t2.facilities_id=9 THEN 7
ELSE 8
END as pre_status
from cars_listing t0
inner join
cars_listing_details t1
on t0.id=t1.mg_listing_id
inner join
cars_facilities_listing t2
on t1.cars_listing_id=t2.listing_id
where t0.type='new_cars'
order by pre_status
助けてくれてありがとう。