объединение таблиц в MySQL запрос? - PullRequest
1 голос
/ 13 декабря 2011

Я хотел бы выполнить запрос к двум таблицам "продукты" и "категория". В моей таблице продуктов 30 записей.Таблица продуктов имеет имя столбца category_ids varchar (255), в котором хранятся идентификаторы категории в формате (10,11,12,130, ..) для каждой записи таблицы продуктов.В сортировке товара может быть много категорий.таблица категорий с именем столбца parent_id, который является родительской категорией этой категории.

Я хочу перечислить запись со всеми категориями этого продукта.

Например, посмотрите на одну запись таблицы продуктов, имеющую id = 7.

    product_Id = 7,
    category_ids = '213,215,216',
    product_name = 'Ponds', 
    .....

Средство для прудов продуктов имеет три категории = category.id = 213, category.id = 215 и категорию.id = 216.

Я хочу перечислить здесь все три записи прудов, как в этом формате: =

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

Я пытаюсь с этим запросом: -

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 child.id in(p.category_ids) 
left join category parent on parent.id = child.parentid and parent.parentid = 0
where p.id = 7  

Приведенный выше запрос получает только одну запись, а не все три записи, как указано выше.

Какое условие и соединение в этом запросе будут применяться для получения результата, как описано выше.

Извините, что потратил вашиценное время.

Буду признателен за любые предложения и идеи.

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

1 Ответ

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

Попробуйте изменить условие ВКЛ -

LEFT JOIN products p ON child.id IN(p.category_ids) 

->

LEFT JOIN products p ON FIND_IN_SET(child.id, p.category_ids)

... потому что:

SELECT 1 IN ('1,2,3') find_1, 2 IN ('1,2,3') find_2;
+--------+--------+
| find_1 | find_2 |
+--------+--------+
|      1 |      0 | -- 0 !
+--------+--------+


SELECT FIND_IN_SET(1, '1,2,3') find_1, FIND_IN_SET(2, '1,2,3') find_2;
+--------+--------+
| find_1 | find_2 |
+--------+--------+
|      1 |      2 |
+--------+--------+

GROUP_CONCAT функция.

пример:

SELECT p.product_Id, p.product_name, GROUP_CONCAT(c.category) FROM products p
  JOIN category c
    ON FIND_IN_SET(child.id, p.product_Id)
GROUP BY p.product_Id;
...