[英]MySQL order by points from 2nd table
因此,我有MySQL 3表,项目(在这种情况下为住宿属性,数据在下面进行了简化),该属性可能提供的便利设施以及Facilities_index,它是所提供的每种便利设施的项目ID和便利设施ID的列表。 最终用户可以选择他们想要的任何数量的便利设施,而我想按与他们要寻找的设施数量相匹配的顺序返回结果。 因此,如果他们搜索3种不同的便利设施,我希望列出的商品提供全部3种商品,然后提供2种,1种商品,最后提供其余商品。 我有一个查询,认为可以按正确的顺序获取结果,但我希望我也可以根据匹配项返回一个点值,这就是我遇到麻烦的地方。 在涉及更复杂的查询时,我的SQL技能有点缺乏。
这是我有一个示例查询,它以正确的顺序返回结果:
SELECT * FROM items
ORDER BY
(
SELECT count(*) AS points
FROM `amenities_index`
WHERE
(amenity_id = 1 || amenity_id = 2)
AND amenities_index.item_id = items.id
) DESC
表格的结构如下。 任何帮助表示赞赏。
items table
id name
1 location 1
2 location 2
3 location 3
4 location 4
amenities table
id name
1 fireplace
2 television
3 handicapped accessible
4 kitchenette
5 phone
amenities_index
item_id amenity_id
1 2
1 3
1 5
2 1
2 2
2 6
3 2
3 3
3 4
3 5
您想将表达式移到select
子句中:
SELECT i.*,
(SELECT count(*) AS points
FROM `amenities_index` ai
WHERE amenity_id in (1, 2) AND
ai.item_id = i.id
) as points
FROM items i
ORDER BY points desc;
您也可以将其作为带有聚合的join
查询:
SELECT i.*, ai.points
FROM items i join
(select ai.item_id, count(*) as points
from amenities_index ai
where amenity_id in (1, 2)
) ai
on ai.item_id = i.id
ORDER BY ai.points desc;
在大多数数据库中,与第一个版本相比,我更喜欢此版本。 但是,MySQL允许在视图中使用第一个视图,但不允许第二个视图,因此在某些情况下它具有一些奇怪的限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.