hello stackoverflow社区:),
我有一个复杂的连接查询会给我带来很多麻烦:/
我这里有3张桌子。
1:表[分类学t]
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:表[设置s]
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`
它运行完美,并返回我需要的所有除此之外它返回子项中的REPLICATED结果,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,但是我做错了什么?
答案 0 :(得分:1)
您想在distinct
中使用group_concat()
关键字:
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