我正在做一个练习,我将在数据库上发起一个查询并获得大约 500 个结果。现在我想根据一些条件对这个列表进行排序,并在客户端显示排序后的列表。我正在使用 Java/Java EE 和 MySQL 服务器 5.5 条件是这样的,示例:考虑一个列出了汽车的表所以,我将在表上触发一个查询,它将列出大约 500 辆汽车。现在我想根据用户标准对这个列表进行排序。条件是车龄、车色和车内设施。列表应该像这样排序首先出现满足所有三个条件的汽车列表,即最终用户提到的相同年龄,相同颜色和所有设施用户选择。第二个出现任意 2 个满足汽车列表的条件和一个不满足的条件。第三个出现满足汽车列表的任何一个条件,而不是其他两个。
我怎样才能做到这一点。我在谷歌上搜索过,在 irc 频道中询问过这个问题。无法得到任何帮助。我尝试通过定义 CASES 并最终按 RANK 排序来使用 RANK 函数。当条件字段(列)在同一个表中时,它对我有用。在我的情况下,这些字段来自父表及其与父表具有多对一关系的子表。就像在这个例子中一样,汽车的年龄和颜色存储在父表中,汽车拥有的设施存储在另一个表中。我尝试使用内部连接做同样的事情,但没有运气。
我试过这样的事情:
询问:
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
提前感谢您的帮助。