строка concat в записи mysql - PullRequest
       12

строка concat в записи mysql

1 голос
/ 13 декабря 2011

Мой текущий запрос: -

select
p.id as product_id,
p.product_name,
child.name as category_name,
parent.name as parent_category_name
from category child 
left join products p on FIND_IN_SET(child.id,p.category_ids)
left join category parent on parent.id = child.parentid and parent.parentid = 0
where p.id = 7  

Текущие результаты: -

product_Id | product_name | category_name | parent_category_name
   7           ponds          cream              chemical
   7           ponds          medicine           chemical
   7           ponds          powder             Ayurvedic 

Теперь я хотел бы сгруппировать по идентификатору продукта, и дочерняя / родительская категория должна отображаться в формате через запятую, например "крем, лекарство, пудра". Так что здесь номер записи будет только один такой: -

Ожидаемые результаты: -

product_Id | product_name | category_name        |   parent_category_name
   7           ponds       cream,medicine,powder  chemical,chemical,Ayurvedic 

Я не знаю, возможно это или нет в запросе mysql.

Любые предложения или идеи будут с благодарностью.

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Используйте GROUP_CONCAT() для этого.

SELECT `product_Id`, GROUP_CONCAT(`category_name`)
FROM ...
GROUP BY `product_Id`
1 голос
/ 13 декабря 2011

Это будет работать с использованием GROUP_CONCAT() и группированием по product_id и product_name. Поскольку существующий запрос уже извлекает необходимые столбцы и строки, вам нужно только применить GROUP_CONCAT() и добавить предложение GROUP BY:

select
  p.id as product_id,
  p.product_name,
  /* GROUP_CONCAT() */
  GROUP_CONCAT(DISTINCT child.name) as category_name,
  GROUP_CONCAT(DISTINCT parent.name) as parent_category_name
from category child 
  left join products p on FIND_IN_SET(child.id,p.category_ids)
  left join category parent on parent.id = child.parentid and parent.parentid = 0
where p.id = 7
/* Add a GROUP BY clause */
GROUP BY 
  product_id,
  product_name
...