我有两个表:一个包含产品,第二个包含类别。我希望能够按类别进行搜索,这样当我在父类别中搜索时,它会在父类和子类别中进行搜索。
我的目标: 在“汽车”中执行搜索>>将搜索雪佛兰和丰田
如何实现这一结果?
mysqli_query($conn,"select * from cat where parent=''");
答案 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来区分这两个引用。