gpt4 book ai didi

php - Mysql复杂连接查询问题

转载 作者:行者123 更新时间:2023-11-29 13:35:18 25 4
gpt4 key购买 nike

我有 5 个 mysql 表,如下所述。诊所表

id
name

d_location_subscription表

id
clinic_id
t_id //t_id will contain a foreign key of d_cities, d_states or d_countries table
type "country" "state" "city"

d_countries 表

id
name
code

d_states 表

id
d_country_id
name
code

d_city 表

id
d_state_id
name
code

d_location_subscription表用于记录诊所对某个位置(可以是城市、州或国家)的订阅。我期望获得特定的所有订阅城市使用 d_location_subscription 表的诊所。

例如,如果诊所 A 订阅了德克萨斯州,我应该能够获取诊所 A 的所有城市 ID。

我创建了以下 SQL 查询,它看起来很丑,但生成了我想要实现的接近结果。

select 
`d`.`id` AS `clinic_id`,
if((`dct`.`id` is not null),`dct`.`id`,if((`dct1`.`id` is not null),`dct1`.`id`,`dct2`.`id`)) AS `d_city_id`
from ((((((((
`d_location_subscriptions` `dls`
join `clinics` `d`
on((`d`.`id` = `dls`.`clinic_id`)))
left join `d_countries` `dc`
on(((`dc`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'country'))))
left join `d_states` `ds`
on((`ds`.`d_country_id` = `dc`.`id`)))
left join `d_cities` `dct2`
on((`dct2`.`d_state_id` = `ds`.`id`)))
left join `d_states` `ds1`
on(((`ds1`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'state'))))
left join `d_cities` `dct`
on((`dct`.`d_state_id` = `ds1`.`id`)))
left join `d_cities` `dct1`
on(((`dct1`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'city'))))
)

当 d_location_subscription 表中有类型为“country”的记录时,我收到以下结果。返回的记录总数等于d_states表记录的数量。

this is the result

我应该如何通过更改上述查询来消除这些空值?请告诉我这是否是实现类似功能的正确方法。预先感谢:)

最佳答案

实现您想要的最快、最肮脏的方法就是将此 where 条件附加到您的查询中:

WHERE d_city_id is not null

但您可能更愿意重新编写查询并决定在哪里真正需要 LEFT 连接而不是 INNER 连接

关于php - Mysql复杂连接查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com