簡體   English   中英

MySQL查詢按條件排序

[英]MySQL query to order by condition

我有3張桌子:

a)master_car

  • car_id
  • car_name

b)running_car

  • running_car_id
  • car_id [master_car的外鍵]
  • 日期

c)最愛車

  • favorite_id
  • car_id
  • 用戶身份

行駛汽車是明智的大師級汽車實例。 因此,示例數據集:

master_car

car_id - car_name
1 - Mercedes C Class
2 - Audi
3 - Volkswagen

running_car

running_car_id - car_id - date
1 - 1 - 9 sep 2015
2 - 1 - 10 sep 2015
3 - 1 - 11 sep 2015
4 - 1 - 12 sep 2015
5 - 2 - 10 sep 2015
6 - 2 - 11 sep 2015
7 - 3 - 10 sep 2015
8 - 3 - 10 sep 2015

用戶可以將汽車標記為收藏

favourite_id - car_id - user_id
1 - 2 - 1
2 - 1 - 2

用戶登錄后,他需要查看所有正在行駛的汽車。 但是首先按他最喜歡的汽車分類,然后再按其他汽車分類。

對於前。 如果user_id-1的用戶登錄,則需要查看以下結果:

running_car_id - car_id - date
5 - 2 - 10 sep 2015
6 - 2 - 11 sep 2015
1 - 1 - 9 sep 2015
2 - 1 - 10 sep 2015
3 - 1 - 11 sep 2015
4 - 1 - 12 sep 2015
7 - 3 - 10 sep 2015
8 - 3 - 10 sep 2015

根據用戶喜好排序結果的查詢是什么?

您要按照favourite_id訂購,然后按日期訂購,對嗎? 如果是這樣,這樣的查詢應該起作用。 它將running_car連接到favourite_car表,然后將Left Joins以僅選擇用戶收藏的汽車。 然后,按收藏順序排序,然后按收藏順序排序。 我不確定您如何查詢當前用戶,因此我將其留給您插入。

Select R.*
From running_car R
Left Join favourite_car F on R.car_id = F.car_id and U.(current user_id) = F.user_id
Order by
    (case when F.favourite_id is not null then 1 else 2 end), date

不確定您到底想要什么,但這應該可以解決大部分問題:

select r.running_id, r.car_id, r.date
from
    running_car r
    --inner join master_car m /* use this if you want to grab the name */
        --on m.car_id = r.car_id
    left outer join favourite_car f
        on f.car_id = r.car_id and f.user_id = <user_id>
order by
    case when f.favourite_id is not null then 1 else 2 end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM