2014-01-19 2 views
0

привет StackOverflow сообщества :),MySQL присоединиться просмотра результата REPLICATE

У меня есть комплекс присоединиться запрос вызывает у меня много неприятностей:/

У меня есть 3 таблицы здесь.

1: таблица [taxonomys т]

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

2: Таблица [tax_links л]

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 taxonomys на друг друг 3. настройки сохранить параметры для ресурса, в случае, если я хочу настройки быть связана с отношениями (не глобальный) я установить тип в настройках для tax_links

Моего запроса должен возвращать все ресурсы пользователя и концентрировать все связанные как сыновья, так и идентификатор отношений в 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` 

он работает идеально, и вернуть все, что мне нужно КРОМЕ ТОГО это возвращение реплицируются результатов в сыновьях, relsId.

например таблицы я при условии, когда я запускаю этот запрос, я ожидать, что результат будет

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

проблема, когда я запускаю мой запрос он вернуть дублированный контент для сыновей и relsId так я получаю что-то вроде

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

Почему это happeing? Я знаю, что могу фильтровать array_unique, используя php после того, как я получаю строку, но что я делаю неправильно?

ответ

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 
+0

есть какие-либо проблемы с запуска GROUP_CONCAT агрегировать много строк? моя много для многих таблиц может вырасти до 100+ строк – Zalaboza

+0

100 строк ничего для базы данных. 100 000 строк по-прежнему довольно малы. 'group_concat()' имеет некоторые ограничения на длину строки результата для каждой строки. –

Смежные вопросы