对于一个网站(旅行社),我正在努力提高性能。目前我正在优化搜索模块。除其他外,我想优化一个包含目的地的选择框。系统中有多个目的地,但并非所有目的地都有可预订的住宿。所以我想要至少有 1 个住宿的目的地列表。目的地表(表名:geodata)包含 4 种类型:Country、Area、Region 和 City。由于(某种*)开发不当,住宿表包含 4 个外键(fk_country、fk_area、fk_region 和 fk_city)。* 由于每次开发功能时的增长和传入需求。
我已经尝试了以下基于 IF 语句的左连接。但是这个查询只完成了一半的工作。我最感兴趣的是给定国家、地区、地区或城市的住宿数量。此时我只得到住宿的总数。如何调整此查询以正确获取给定位置类型的住宿数量。
我的查询:
SELECT geodata.id,
geodata.type,
COUNT(accommodation.id) AS count_accommodations
FROM geodata
LEFT JOIN accommodation
ON IF(geodata.type = 'Country', accommodation.fk_country,
IF(geodata.type = 'Area', accommodation.fk_area,
IF(geodata.type = 'Region', accommodation.fk_region, accommodation.fk_city)
)
)
GROUP BY geodata.id
HAVING count_accommodations > 0
电流输出:
|id|type |count_accommodations|
---------------------------------
| 1|Country| 2|
| 2|Area | 2|
| 3|Area | 2|
预期产出
|id|type |count_accommodations|
---------------------------------
| 1|Country| 2|
| 2|Area | 1|
| 3|Area | 1|
任何帮助是极大的赞赏。