繁体   English   中英

MySQL从第二个表中按点排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM