gpt4 book ai didi

php - MYSQL/PHP : Query with multiple joins

转载 作者:行者123 更新时间:2023-11-29 19:45:28 25 4
gpt4 key购买 nike

我试图让以下查询返回正确的信息,但它为同一表中的字段返回不同数量的值。

我的数据架构是 3 个表:

airlines
id|descript|userid

travelers
id|airid|ftrav|ltrav|active

travair
id|travid|airid

这是查询:

SELECT a.id as `aid`,a.descript,userid,
group_concat(t.id) as `tids`,
group_concat(t.ftrav) as `ftravs`,
group_concat(IFNULL(t.ltrav,'')) as `ltravs`,
group_concat(t.active) as `tactives`,
ta.airid
FROM airlines `a`
LEFT JOIN travair `ta`
ON a.id = ta.airid
LEFT JOIN travelers `t`
ON ta.travid = t.id
WHERE a.userid='$userid'
GROUP BY a.id

基本上,我试图查询航空公司表以获取航空公司,但也通过连接这两个表的 ta 表来提取每个航空公司的旅客。

但是,group_concat 字段中都有不同数量的值。在实际的表中,我很大程度上消除了缺失值,因此不会考虑元素数量的差异。查询好像有问题。

有人能发现我的错误吗?这几天一直在为此苦苦挣扎。

最佳答案

一般来说,聚合和联接的问题在于联接会产生用于匹配键的笛卡尔积。用英语来说,这意味着您正在沿着多个维度进行连接并获取同一用户的不同项目的所有组合。

你能做什么?快速而肮脏的解决方案是使用 distinct 关键字:

SELECT a.id as `aid`,a.descript,userid,
group_concat(distinct t.id) as `tids`,
group_concat(distinct t.ftrav) as `ftravs`,
group_concat(distinct coalesce(t.ltrav, '')) as `ltravs`,
group_concat(distinct t.active) as `tactives`

更具可扩展性的解决方案是预先聚合每个维度以获取每个维度的列表。

注意:如果您碰巧希望所有列表的长度相同,则 distinct 可能不适用于您的情况。

关于php - MYSQL/PHP : Query with multiple joins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028678/

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