SQL Query从父类的所有类别中选择产品

时间:2018-03-23 07:31:38

标签: mysql codeigniter

我有一个像这样的类别表

表 - 类别

cat_id     cat_name         parent_id
---------------------------------------
21         Properties            0
--------------------------------------
32         For Rent             21
---------------------------------------
34        Appartments           32
---------------------------------------
35        Houses and villas     32
--------------------------------------
36        Builder Floors        32
-----------------------------------------

像这样的产品表

表 - 产品

ProductID            ProductName         CategoryID
------------------------------------------------------
39                     villa                 35
-----------------------------------------------------
40                     Flat                  35
----------------------------------------------------
41                     appartment            34
------------------------------------------------------
42                     Builder               36
-----------------------------------------------------

我想获取parrent类属性(21)中存在的所有产品..同样的查询需要在单个类别的情况下工作,如果cateogryID = 35我需要产品存在于仅CategoryID 35 ..

目前iam使用的查询是:

select p.ProductID, p.ProductTitle,p.SalePrice,p.C_Date,p.ProductShortDescription, c.cat_name, 
c.cat_id
from products p JOIN
(select * from categories where cat_id =32 OR parent_id = 32 ) c
on p.CategoryID = c.cat_id

这个查询对我来说很好......但是在parrent类别属性(21)的情况下它不起作用..在所有其他情况下它的工作正常。

请帮我改变上面的查询..对于属性(21)

1 个答案:

答案 0 :(得分:0)

您可以使用 LEFT JOIN

   SELECT 
    p.ProductID,
    p.ProductTitle,
    p.SalePrice,
    p.C_Date,
    p.ProductShortDescription,
    c.cat_name,
    c.cat_id
FROM
    products p
        LEFT JOIN
    (SELECT 
        *
    FROM
        categories
    WHERE
        cat_id = 32 OR parent_id = 32) c ON p.CategoryID = c.cat_id

<强>更新

SELECT 
    p.ProductID,
    p.ProductTitle,
    p.SalePrice,
    p.C_Date,
    p.ProductShortDescription,
    c.cat_name,
    c.cat_id
FROM
    products p
        LEFT JOIN
    categories c ON p.CategoryID = c.cat_id
WHERE
    c.cat_id = 21 OR c.parent_id = 21