Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在尝试获取父ID的父ID_Php_Mysql - Fatal编程技术网

Php 正在尝试获取父ID的父ID

Php 正在尝试获取父ID的父ID,php,mysql,Php,Mysql,我正在使用PHP和MYSQL从头开始开发一个电子商务网站。我有一个类别表,其中一列用于ID,另一列用于Parent\u ID 在categories.php上显示产品时,我将其设置为显示产品,其中Parent\u ID或ID等于$\u GET['ID']字段。但现在我遇到了一个问题 在我的“食品杂货”类别中,我有“清洁与家居”子类别,在“清洁与家居”下,我有几个类别,如“洗衣房”、“浴室用品”等 我的问题是,第三级的产品不显示在“杂货”类别中,因为从技术上讲,“洗衣房”的父ID是“清洁和家庭”。

我正在使用
PHP
MYSQL
从头开始开发一个电子商务网站。我有一个类别表,其中一列用于
ID
,另一列用于
Parent\u ID

categories.php
上显示产品时,我将其设置为显示产品,其中
Parent\u ID
ID
等于
$\u GET['ID']
字段。但现在我遇到了一个问题

在我的“食品杂货”类别中,我有“清洁与家居”子类别,在“清洁与家居”下,我有几个类别,如“洗衣房”、“浴室用品”等

我的问题是,第三级的产品不显示在“杂货”类别中,因为从技术上讲,“洗衣房”的父ID是“清洁和家庭”。永远不会有超过三个级别(父级、子级、孙子级),但我希望孙子级中的类别也显示在父级中


我试着浏览了MYSQL的文档和其他论坛,但到目前为止没有成功。

这需要几次连接才能到达顶级父级:

select c.*,
       coalesce(cp2.id, cp.id, p.id) as MostParentId
from categories c left outer join
     categories cp
     on c.parent_Id = cp.id left outer join
     categories cp2
     on cp.parent_id = cp2.parent_id
where c.id = $_GET['id'] or cp.id = $_GET['id'] or cp2.id = $_GET['id'];

然后,您可以使用
比较
id
与父类别、子类别或任何内容的匹配情况。

您知道潜在级别的数量吗?如果是这样的话,您可以一次又一次地自联接表本身。如果没有,则需要研究使用动态sql。有很多关于它的例子。另一方面,如果您从头开始创建它,考虑研究<代码>嵌套集合模型——这类事情要容易得多。嵌套集合对于存储SQL中的层次结构非常有用:@ USE4035…嵌套的集合/闭包表很值得了解。然而,OP明确指出,类别最多有三个级别。这不需要通用的解决方案,尤其是需要一组复杂的触发器来维护数据完整性的解决方案。