如果运行以下查询:
从“locations”中选择loc2.*作为loc
在loc.location_id=loc2.location_父级上将内部联接“locations”作为loc2
其中loc.location_status='发布'
我得到以下结果:
+-------------+------------------+-----------------+-----------------+
|位置| id |位置|名称|位置|父位置|状态|
+-------------+------------------+-----------------+-----------------+
|19 |达卡分部| 564 |出版|
|22 |达卡区| 19 |出版|
|26 |达卡市| 22 |出版|
|28 |米尔普尔| 26 |出版|
|30 |米尔普尔-12 | 28 |出版|
|32 | Mirpur DOHS | 30 |出版|
|634 |加齐普尔区| 19 |出版|
+-------------+------------------+-----------------+-----------------+
一组7行(0.00秒)
实际上,我正试图从数据库中获取所有的孩子/孙子。现在,上面的查询只是按照父子规则对行进行排序并返回所有行。但是,我想在SQL中添加一个条件,以便它只获取特定父级的子级。
例如,我想获取19的所有子行/节点/位置。结果集应该如下:
+-------------+------------------+-----------------+-----------------+
|位置| id |位置|名称|位置|父位置|状态|
+-------------+------------------+-----------------+-----------------+
|22 |达卡区| 19 |出版|
|26 |达卡市| 22 |出版|
|28 |米尔普尔| 26 |出版|
|30 |米尔普尔-12 | 28 |出版|
|32 | Mirpur DOHS | 30 |出版|
+-------------+------------------+-----------------+-----------------+
我试过这个:
从“locations”中选择loc2.*作为loc
在loc.location_id=loc2.location_父级上将内部联接“locations”作为loc2
其中loc.location_status=“publish”和loc2.location_parent=19
而这个:
从“locations”中选择loc2.*作为loc
在loc.location_id=loc2.location_父级上将内部联接“locations”作为loc2
其中loc.location_status=“publish”和loc.location_parent=19
但它们都会返回相同的结果,这应该是:
+-------------+------------------+-----------------+-----------------+
|位置| id |位置|名称|位置|父位置|状态|
+-------------+------------------+-----------------+-----------------+
|22 |达卡区| 19 |出版|
+-------------+------------------+-----------------+-----------------+
那么,我该怎么做才能达到我想要的结果呢?

最佳答案

实际上,这是一个名为递归的高级数据库主题您的要求是从最上面的父级及其所有子级、子级等获取数据树。
其他DBMS提供了解决此类问题的功能,例如Microsoft SQL Server调用其解决方案CTE(Common Table Express),但这是mySQL中的一个长期问题,没有简单的解决方案来解决您的问题。不过,您可以在mysql中搜索递归,以获得有关此主题的更多详细信息。

关于mysql - MySQL-仅获取特定 parent 的 child ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27603086/

10-11 20:12