mysql join显示复制结果

时间:2014-01-19 16:49:53

标签: php mysql sql join concatenation

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,但是我做错了什么?

1 个答案:

答案 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