2016-11-12 115 views
-1

我有两个表:一个包含产品,第二个包含类别。我希望能够按类别进行搜索,以便在父类别中搜索时,它将搜索父类别和子类别。搜索类别和子类别

我的目标: 请在“汽车”的搜索将>>雪佛兰搜索和丰田

我怎样才能实现这个结果?

mysqli_query($conn,"select * from cat where parent=''"); 

mysqli pic

+0

请参阅http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

回答

0

既然你没有表现出你的表结构,我锣做出一些猜测。我也希望这个答案不是太简单,但没有更多的继续,似乎你正在寻找基本的想法。

假设您的示例中的“cars”在类别表中,“chevrolet”和“toyota”在产品表中,那么您需要在产品表中指定另一个栏,说明每个产品的类别。

所以如果你有一个类别表所示:

cat_id | cat_name 
----------------- 
    1 | cars 
    2 | appliances 

,你有一个产品表所示:

product_id | product_name | cat_id 
---------------------------------- 
    1  | chevrolet | 1 
    2  | kitchenaid | 2 
    3  | toyota  | 1 

重要的是,在产品表中的每个项目都有一个参考类别是什么。这就是关系数据库所做的:它们提供了一种显示不同实体之间关系的方式。

然后得到的所有产品类别中的“车”的列表,你只需要在适当的类别来选择的:

SELECT product_name from products WHERE cat_id = 1; 

如果您还希望包括从类别表信息在你的结果,你可以加入表:

SELECT product_name, cat_name from products 
    JOIN categories ON products.cat_id = categories.cat_id 
    WHERE categories.cat_id = 1 

这将让你的结果:

product_name | cat_name 
------------------------ 
    chevrolet | cars 
    toyota  | cars 

在某些情况下,将类别和产品放在同一个表格中是有意义的(例如,如果您想要具有任意深度值的树,例如'雪佛兰'是父'volt','impala'等)。

同样的查询仍然有效,但现在你本身加入表(我使用基于下面的评论列名):

SELECT child.name, parent.name 
    FROM products AS parent 
    JOIN products AS child ON parent.id = child.parent 
    WHERE parent.id = 1 

这将让你几乎相同的结果如上。虽然它是连接到它自己的同一张表,但我使用AS来区分这两个引用。

+0

亲爱的杰里 我有类别表https://i.stack.imgur.com/f6cI1。png 我需要做搜索引擎,当我在父类别中搜索父类别 –

+0

的子类别时,确定,假设有类别和产品在同一个表中的原因,查询实际上没有太大变化。不同之处在于,不是将两个表连接在一起,而是将自己与表连接起来。我会在我的回答中加入一个快速补充。 – Jerry

+0

亲爱的 这项工作选择的类别,但我想进行选择和搜索,当我选择主要类别搜索将运行在此 的所有子类别上我试图做到这一点,但没有机会 –