搜索具有父类别的子类别

时间:2019-11-20 09:45:19

标签: php mysql sql

我有一个tbCategories表:

CREATE TABLE tbCategories(
    id INT AUTO_INCREMENT,
    name VARCHAR(50),
    parentId INT DEFAULT NULL
);

INSERT INTO tbCategories(NAME, parentId) VALUES
('Cell Phones & Accessories', NULL),
('Computers & Accessories', NULL),
('Flip Cases', 1),
('Basic Cases', 1),
('Cell Phones', 1),
('Tablets', 2),
('Laptops', 2),
('Desktops', 2);

和一个tbProducts表:

CREATE TABLE tbProducts(
    id INT AUTO_INCREMENT,
    name VARCHAR(100),
    category INT,
    price FLOAT
);

INSERT INTO tbProducts(NAME, category, price) VALUES
('Apple iPhone 8 64GB Space Gray', 5, 449.00),
('Samsung Galaxy S10', 5, 464.99),
('Huawei P30 Pro', 5, 719.99),
('Samsung Note 10+', 5, 902.49),
('Samsung A10', 5, 149.90),
('Lenovo Chromebook', 7, 219.55),
('ASUS ROG', 7, 930.00);

我想通过搜索查询中的父类别访问子类别中的产品。 我试过了,但是我发现这是错误的查询。

SELECT id, name, price FROM tbProducts WHERE (category=? OR category = (SELECT id FROM tbCategories WHERE tbCategories.parentId=?)) AND name LIKE ? OR productCode LIKE ? OR productionCode LIKE ?

因为有多个数据来自子查询。我想我需要使用 JOIN ,但是我不能。你能帮忙吗? 我期望的结果:我将在父类别中搜索,例如,当我在“手机和配件”类别中搜索“三星”时,它将在所有子类别中搜索“翻盖手机壳,基本手机壳,手机” “手机和配件”类别的搜索结果,并给我结果。 我用书面解释了。我不知道还能告诉你什么。

1 个答案:

答案 0 :(得分:0)

您需要使用JOIN

SELECT PRO.id 
     , PRO.name
     , PRO.price 
  FROM tbProducts PRO 
  JOIN tbCategories CAT 
    ON PRO.category = CAT.id 
  JOIN tbCategories CAT2 
    ON CAT2.id = CAT.parentId 
 where PRO.name = 'Samsung Galaxy S10'