2016-07-13 5 views
0

Мой purchaseproduct столMysql группы CONCAT дает неверные результаты

+------------+------------+ 
| productids | quantities | 
+------------+------------+ 
| 1,3,4,5 | 1,1,1,1 | 
| 2,3,4,5 | 1,1,1,1 | 
+------------+------------+ 

Мой стол продукт

productsid | productsname     | 
+------------+-----------------------------+ 
|   1 | Phone      | 
|   2 | Laptop      | 
|   3 | Charger      | 
|   4 | Earphone     | 
|   5 | Camera      | 

Я хочу получить название продукта на основе productids в purchaseproduct таблице

, как показано ниже Out обязательны к заполнению

Phone,Charger,Earphone,Camera (In row one) 
Laptop,Charger,Earphone,Camera (In row two) 

Я попытался это ниже заявление и многие другие

select group_concat(p.productsname) from purchaseproducts as pp join products as p on find_in_set(p.productsid,pp.productids); 

Но выход я получаю

Phone,Charger,Earphone,Camera,Laptop,Charger,Earphone,Camera (All in one row) 

Как я могу добиться вывода мне нужно?

+2

Вы знаете, почему вы задаете этот вопрос? Потому что вы упускаете из виду дизайн базы данных. Сохранение значений, разделенных запятой, слишком плохо! [** Является ли хранение разделительного списка в столбце базы данных действительно так плохо? **] (http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column- действительно-то-плохой) ** ДА ** – 1000111

+0

@ 1000111-Требование таково, что .. :( –

+0

Измените требование. – Strawberry

ответ

1

Вы можете просто использовать DISTINCT внутри GROUP_CONCAT:

select pp.productsid , group_concat(DISTINCT p.productsname) 
from purchaseproducts pp 
join products p 
on find_in_set(p.productsid,pp.productids); 
GROUP BY pp.productsid 
+0

с использованием отдельных не работает. Он также печатает только одну строку, но отформатирован. –

+0

Необходимо использовать 'GROUP BY'. Кстати, нет ли '' '' '' 'в таблице' purchaseproduct'? @RajaDhasan – 1000111

+0

О, вам не было предложения 'GROUP BY' .. попробуйте сейчас. – sagi

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