gpt4 book ai didi

php - mysql join 显示复制结果

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

你好 stackoverflow 社区:),

我有一个复杂的连接查询给我带来了很多麻烦:/

我这里有 3 张 table 。

1:表[分类法]

id  ownerId  type
1 1 office
2 1 inventory
3 1 inventory_item

2:表[tax_links l]

id  parent  son
1 1 2
2 1 3

3:表[设置]

id taxId title     value    type
1 1 name office1 taxonomy
2 1 location Address taxonomy
3 1 settings on tax_links

所以 1.分类表包含用户的所有资源 2. link_taxs 将 2 个分类法相互链接 3.设置保存资源的设置,以防万一我希望设置与关系(非全局)相关,我将设置中的类型设置为tax_links

我的查询应该返回用户的所有资源,并将所有相关资源集中为儿子,并将关系的id集中在relsId中。

SELECT `t`.`id`, group_concat(l.son) as sons, group_concat(l.id) as relsId, group_concat( s.title ) as titles, group_concat( s.value ) as vals, `t`.`name`, `t`.`type`, group_concat(s.id) as sid
FROM (`taxonomys` t)
LEFT JOIN `tax_links` l ON `l`.`parent` = `t`.`id`
LEFT JOIN `settings` s ON `s`.`taxId` = `t`.`id` and s.table = 'taxonomy'
WHERE `t`.`ownerId` = 1
GROUP BY `t`.`id`

它运行完美,并返回我需要的所有内容除了它返回 sons,relsId 中的重复结果。

例如,当我运行此查询时我提供的表,我希望结果是

id     sons     relsId     titles          vals
1 2,3 1,2 name,location office1,address

问题是当我运行查询时,它返回 sons 和 relsId 的重复内容,所以我得到类似的内容

id     sons         relsId     titles          vals
1 2,3,2,3 1,2 name,location office1,address
name,location office1,address

为什么会发生这种情况?我知道我可以在获取行后使用 php 过滤 array_unique,但我做错了什么?

最佳答案

您想要在 group_concat() 中使用 distinct 关键字:

SELECT `t`.`id`, group_concat(distinct l.son) as sons,
group_concat(distinct l.id) as relsId,
group_concat( s.title ) as titles, group_concat( s.value ) as vals,
`t`.`name`, `t`.`type`, group_concat(s.id) as sid

关于php - mysql join 显示复制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21219624/

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