PHP分层MYSQL查询

PHP分层MYSQL查询,php,mysql,database,Php,Mysql,Database,我试图对下面的数据库示例进行查询,如果某个特定ID的父项大于零,则回显该父项的名称 例如,当查询到达ID#5时,在父项下,我希望得到“Adidas”而不是“2”。现在我得到了父母的ID,但我想更进一步,检索父母的名字 数据库示例: ID | PARENT | NAME ——————————————————————— 1 | 0 | Nike 2 | 0 | Adidas 3 | 1 | Jordan 4 | 1

我试图对下面的数据库示例进行查询,如果某个特定ID的父项大于零,则回显该父项的名称

例如,当查询到达ID#5时,在父项下,我希望得到“Adidas”而不是“2”。现在我得到了父母的ID,但我想更进一步,检索父母的名字

数据库示例:

ID  |  PARENT  |  NAME
———————————————————————
1   |     0    |  Nike
2   |     0    |  Adidas
3   |     1    |  Jordan
4   |     1    |  Bryant
5   |     2    |  Rose
6   |     2    |  Howard
下面是我正在执行的查询(因为我从两个表调用,所以有点复杂):

提前谢谢大家

$q="select cat1.* from categories cat1 inner join categories cat2 on cat1.PARENT=cat2.ID where cat2.ID=5"

您将从这个查询中得到一个想法。

要从查询中获得所需的输出,在本例中,您需要使用主ID和父ID作为同一个表

查询将被删除

SELECT `cat1`.`ID` , `cat1`.`Parent` , `cat2`.`NAME`
FROM `categories` AS cat1
LEFT JOIN `categories` AS cat2 ON `cat2`.`ID` = `cat1`.`PARENT` 
类别表已通过创建别名
cat1
cat2
连接到自身

在这种情况下,重要的是您将从哪个别名获得父级的名称。由于第二个别名cat2的ID与第一个别名cat1匹配,您将获得第二个别名的父类别名称


希望它能对您有所帮助。

是类别表还是产品表?您需要一个连接条件来关联表,否则您会得到一个完整的交叉产品。这是类别表。
产品
表在哪里?这真的与这个问题有关吗?@Barmar哦,好吧……我甚至不知道如何处理这个问题。对我来说是个新手,谢谢。为什么在第一行你说
cat2
NAME
…既然我仍然在引用同一个表,那么它不应该是
cat1
NAME
?好的,那么你使用的是cat2.NAME,因为你引用的是名为cat2的克隆表。顺便说一句,这是可行的。完美的
SELECT `cat1`.`ID` , `cat1`.`Parent` , `cat2`.`NAME`
FROM `categories` AS cat1
LEFT JOIN `categories` AS cat2 ON `cat2`.`ID` = `cat1`.`PARENT`