在mysql查询中连接表?

时间:2011-12-13 09:53:30

标签: mysql join left-join

我想对两个表“产品”和“类别”运行查询,我的产品表中有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  

以上查询只获得一条记录而不是上述所有三条记录。

如上所述,将应用此查询中的条件和加入来获取结果。

抱歉花了你宝贵的时间。

非常感谢任何建议和想法。

非常感谢。

1 个答案:

答案 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;