我有三张桌子:
( a) master_car
( b) running_car
( c) favorite_car
跑车是主车约会的一个实例。因此,示例数据集:
master_car
car_id - car_name
1 - Mercedes C Class
2 - Audi
3 - Volkswagenrunning_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根据用户的喜好来获得排序结果的查询是什么?
发布于 2015-09-11 16:47:59
不确定您到底想要什么,但这应该涵盖大部分内容:
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发布于 2015-09-11 16:45:30
您是按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), datehttps://stackoverflow.com/questions/32528246
复制相似问题