Php 如何循环连接

Php 如何循环连接,php,mysql,Php,Mysql,我在图片中有这个表格数据。它基本上由同一表格中的地名和它所属的其他地名组成。所属的字段指的是另一个位置的id 以下是我正在使用的查询: SELECT A.type, A.name_en AS name_A, B.name_en AS name_B, C.name_en AS name_C FROM address AS A

我在图片中有这个表格数据。它基本上由同一表格中的地名和它所属的其他地名组成。
所属的字段
指的是另一个位置的
id

以下是我正在使用的查询:

         SELECT A.type,
                A.name_en AS name_A,
                B.name_en AS name_B,
                C.name_en AS name_C

                FROM address AS A
                LEFT JOIN address AS B ON A.belongs_to = B.id
                LEFT JOIN address AS C ON B.belongs_to = C.id 
                WHERE A.name_en LIKE '%".$_GET['name']."%'
                "
当我输入“sy”时,它可以正常工作,这让我明白:

[type] = city
[name_A] =sydney
[name_B] =NSW
[name_C] =australia
但是,当我键入“肯”时,我会:

[type] =suburb
[name_A] = kensington
[name_B] =sydney
[name_C] = NSW

它想念澳大利亚。我想让它更灵活,这样它可以为我提供所有数据,直到国家名称,
类型
1
所属的国家名称
0
。我一直在尝试寻找循环技术,但没有找到一个好的参考。告诉我你是否有其他建议来完成这项工作,或者如果你认为我的解决方案是正确的,请帮助我完成循环工作,或者让我参考有关MySQL循环的详细参考资料。

用户加入没有错。您的状况基本上取决于您的
WHERE
状况。请提供表的结构,或者您可以尝试以下操作:

SELECT A.type,
                A.name_en AS name_A,
                B.name_en AS name_B,
                C.name_en AS name_C

                FROM address AS A
                LEFT JOIN address AS B ON A.belongs_to = B.id
                LEFT JOIN address AS C ON B.belongs_to = C.id 
                WHERE A.name_en LIKE '%".$_GET['name']."%' or A.id=1

希望这对您有所帮助

您选择的保存链接数据的技术称为“邻接列表”。一般来说,没有办法“循环”随机深度A.L。要查看从“kensington”到“australia”的项目,您还需要一个加入查询。您必须向每一行添加一个联接

寻找替代技术,如“嵌套列表”和“物化路径”。
或者在PHP中使用循环遍历邻接列表项。

这必须在SQL中完成吗?我认为在应用程序逻辑中这样做会更好,它可以说“循环直到
所属”
为0”。我不知道这怎么可能!您在PHP中显式使用函数,请考虑使用表最终将包含数千条记录。您建议我检索它们,然后使用PHP函数来获取所需的内容?邻接列表是存储分层数据的一种方法,但有一点是,它最多只能覆盖三个
name\u en
,并且不能灵活地进行位置分支。有时,我需要四次或更多的左连接才能找到国家名称。
SELECT A.name_en AS name_A, NULL AS TYPE    

FROM tablename1 AS A
LEFT JOIN tablename1 AS B ON A.belongs_to = B.id                
WHERE A.name_en LIKE '%ken%' OR A.belongs_to = B.id OR A.belongs_to = 0

UNION ALL

SELECT NULL AS name_A, C.type
FROM tablename1 AS C
WHERE c.name_en LIKE '%ken%'