首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据左连接中的列值计算行数

根据左连接中的列值计算行数
EN

Stack Overflow用户
提问于 2012-10-31 05:47:54
回答 1查看 102关注 0票数 0

对于一个网站(旅行社),我正在致力于性能提升。目前我正在优化搜索模块。在其他事情中,我想优化一个包含目的地的选择框。在系统中有几个目的地,但并不是所有目的地都有可预订的住宿。所以我想要有一个目的地列表,其中至少有1个住宿。目标表格(表名: geodata)包含4种类型:国家/地区、区域、区域和城市。由于(某种*)开发不当,容纳表包含4个外键(fk_country、fk_area、fk_region和fk_city)。*由于每次开发功能时的增长和传入需求。

我尝试了以下基于IF语句的left join。但是这个查询只做了一半的工作。我最感兴趣的是某个国家、地区、地区或城市的住宿数量。目前我只得到了住宿的总数。如何调整此查询以正确获取给定位置类型的住宿数量。

我的问题是:

代码语言:javascript
复制
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

当前输出:

代码语言:javascript
复制
|id|type   |count_accommodations|
---------------------------------
| 1|Country|                   2|
| 2|Area   |                   2|
| 3|Area   |                   2|

预期输出

代码语言:javascript
复制
|id|type   |count_accommodations|
---------------------------------
| 1|Country|                   2|
| 2|Area   |                   1|
| 3|Area   |                   1|

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 06:10:23

它不起作用,因为您没有连接条件。您要做的是评估一个外键(fk_country,fk_area,...),但是您不会在任何地方使用它。

代码语言:javascript
复制
...
left join accommodation
on (... fk_...) = geodata.???
group by geodata.id
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13148060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档