在类别和子类别中搜索

时间:2016-11-12 07:25:05

标签: php mysql

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

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

如何实现这一结果?

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

mysqli pic

1 个答案:

答案 0 :(得分:0)

由于你没有展示你的桌面结构,我想做一些猜测。我也希望这个答案不是太简单,但没有更多的继续下去似乎你正在寻找基本的想法。

假设在您的示例中,“cars”位于类别表中,并且“chevrolet”和“toyota”位于products表中,那么您需要在products表中另一列说明每个产品的类别。

所以,如果您有类别表:

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

你有一个产品表,如:

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

重要的是,product表中的每个项目都引用了该类别。这就是关系数据库的作用:它们提供了一种显示不同实体之间关系的方法。

然后,要获取“汽车”类别中所有产品的列表,您只需选择适当类别的产品:

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

在某些情况下,将类别和产品放在同一个表中是有意义的(如果你想要一个任意深度值的树,例如,'chevrolet'是'volt'的父级,''黑斑羚'等。)。

相同的查询仍然有效,但现在您自己加入表格(我根据您的评论使用列名称):

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

这将获得与上述相同的结果。虽然它是连接到自身的同一个表,但我使用AS来区分这两个引用。