MySQL查询按条件排序

时间:2015-09-11 16:38:28

标签: mysql sql

我有3张桌子:

a)master_car

  • car_id
  • car_name

b)running_car

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

c)favorite_car

  • favorite_id
  • car_id
  • USER_ID

跑车是明天主车的一个实例。那么,示例数据集:

master_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

running_car

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

用户可以将汽车标记为收藏夹

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

当用户登录时,他需要查看所有正在运行的汽车。但首先按他最喜欢的汽车和其他汽车排序。

对于前。如果用户使用user_id - 1登录,则需要查看以下结果:

{{1}}

根据用户最喜欢的方式获取结果的查询是什么?

2 个答案:

答案 0 :(得分:3)

你按照favourite_id订购,然后是日期,这是正确的吗?如果是这样,这样的查询应该有效。它将running_car加入favourite_car表,Left Joins只选择用户喜欢的汽车。然后,它通过favourited订购汽车,然后不受欢迎。我不确定你是如何查询当前用户的,所以我会留给你插入。

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

答案 1 :(得分:1)

不确定你想要什么,但这应该涵盖大部分内容:

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