我想对两个表“产品”和“类别”运行查询,我的产品表中有30条记录。 product表有一个列名category_ids varchar(255),它为产品表的每个记录以类型(10,11,12,130,..)的格式存储类别的ID。在排序中,产品可以是多个类别。具有列名parent_id的类别表,该列是该类别的父类别。
我想列出该产品所有类别的记录。
例如,查看具有id = 7的products表的一条记录。
product_Id = 7,
category_ids = '213,215,216',
product_name = 'Ponds',
.....
表示产品池有三个类别= category.id = 213,category.id = 215和category.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
以上查询只获得一条记录而不是上述所有三条记录。
如上所述,将应用此查询中的条件和加入来获取结果。
抱歉花了你宝贵的时间。
非常感谢任何建议和想法。
非常感谢。
答案 0 :(得分:3)
尝试更改ON条件 -
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;