2013-02-21 4 views
2

У меня есть 4 таблицы в базе данных MySQL, suppliers, categories, subcats & listings.Объединение нескольких строк MySQL без дубликатов

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

поставщиков

sp_id  sp_name  sp_email 
1   Apple   [email protected] 
2   Samsung  [email protected] 

категории

cat_id  cat_name 
3   Electronics 
4   Software 

подкаты

subcat_id subcat_name cat_id 
5   Mobiles  3 
6   Computers  3 

объявления

list_id sp_id   subcat_id 
1   1    5 
2   1    6 

Я пытаюсь объединить и извлечь данные вместе с тем есть только одна запись в расчете на поставщика с несколькими подразделами перечислены например:

РЕЗУЛЬТАТ

sp_id  sp_name  sp_email   cat_name/cats  subcat_name/subcats 
1   Apple   [email protected] Electronics, Software Mobiles, Computers 
2   Samsung  [email protected] Electronics   Mobiles 

В настоящее время у меня есть следующий запрос

SELECT * 
FROM suppliers as s 
LEFT JOIN listings as l ON s.sp_id=l.sp_id 
LEFT JOIN subcats as p ON p.subcat_id=l.subcat_id 
LEFT JOIN categories as c ON c.cat_id=p.cat_id 
ORDER BY s.sp_id 

Однако это выводит несколько записей в поставщика, одну запись для каждой категории или подкатегории, связанные с ним. Есть ли более простой способ сделать это через SQL или с несколькими запросами в PHP?

Я нахожусь в пределах моих нынешних знаний о mySQL, и любые предложения или предложения в правильном направлении были бы весьма полезными.

ответ

1

использование GROUP_CONCAT

SELECT s.*, 
     GROUP_CONCAT(c.cat_name) catName, 
     GROUP_CONCAT(p.subcat_name) subcatName 
FROM suppliers as s 
     LEFT JOIN listings as l ON s.sp_id=l.sp_id 
     LEFT JOIN subcats as p ON p.subcat_id=l.subcat_id 
     LEFT JOIN categories as c ON c.cat_id=p.cat_id 
GROUP BY s.sp_id, s.sp_name, s.sp_email 
ORDER BY s.sp_id 
+0

Большое спасибо это работало безупречно, и я узнал кое-что. – themightyant

0

Вы можете использовать GROUP BY в сочетании с GROUP_CONCAT, чтобы показывать только уникальные значения из определенного столбца с разделенным запятой как одно из значений.

0

Вы хотите использовать выражение GROUP BY вместе с функцией GROUP_CONCAT. Это позволит вам объединить строки, которые имеют определенные значения при объединении тех, которые у них нет. Например, в вашем случае это может заводиться быть что-то вроде:

SELECT s.sp_id, s.sp_name, group_concat(', ', c.cat_name) FROM suppliers as s LEFT JOIN listings as l ON s.sp_id=l.sp_id LEFT JOIN subcats as p ON p.subcat_id=l.subcat_id LEFT JOIN categories as c ON c.cat_id=p.cat_id ORDER BY s.sp_id GROUP BY s.sp_id, s.sp_name;

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