PHP Hierarchical MYSQL查询

时间:2016-09-10 06:25:58

标签: php mysql database

我正在尝试对下面的数据库示例进行查询,如果某个特定ID的父级大于零,则回显该父级的NAME。

例如,当查询达到ID#5时,在PARENT下我想得到“Adidas”而不是“2”。现在我得到了父母的身份证,但我想更进一步,找回父母的姓名。

数据库示例:

ID  |  PARENT  |  NAME
———————————————————————
1   |     0    |  Nike
2   |     0    |  Adidas
3   |     1    |  Jordan
4   |     1    |  Bryant
5   |     2    |  Rose
6   |     2    |  Howard

以下是我正在执行的查询(由于我从2个表调用,它有点复杂):

$q = "SELECT `categories`.`ID`, `categories`.`Parent`, `categories`.`NAME`, 
             `products`.`ID` as `ID2`, `products`.`NAME` 
      FROM `categories`, `products`";

提前谢谢大家。

2 个答案:

答案 0 :(得分:1)

要从查询中获取所需的输出,您需要在这种情况下使用SELF JOIN作为主ID和父ID都在同一个表中。

查询将是

SELECT `cat1`.`ID` , `cat1`.`Parent` , `cat2`.`NAME`
FROM `categories` AS cat1
LEFT JOIN `categories` AS cat2 ON `cat2`.`ID` = `cat1`.`PARENT` 

通过创建别名cat1cat2,类别表已加入自身。

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

希望这对你有帮助。

答案 1 :(得分:0)

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

您将从此查询中获得一个想法。