3

我在图片中有这个表格数据。它基本上由地名和它在同一张表中所属的其他地方组成。该字段belongs_to是指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

然而,当我输入“ken”时,它让我:

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

它想念澳大利亚。我想让它变得灵活,这样它就可以得到所有数据,直到type_orderis1belongs_tois所在的国家/地区名称0。我一直在尝试寻找循环技术,但找不到好的参考。告诉我如果您有其他建议来完成这项工作,或者您认为我的解决方案是正确的,请帮助我处理循环问题,或者向我推荐有关 MySQL 循环的详细参考。

4

3 回答 3

3

用户加入没有任何问题。你的情况基本上取决于你的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
于 2013-04-02T04:14:41.710 回答
0
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%'

希望对你有帮助

于 2013-04-02T04:23:57.453 回答
0

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

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

于 2013-04-02T05:01:04.470 回答