我在MySQL
中有这个表:
| id | mainid | name |
+----+--------+---------------------+
| 1 | 0 | main 1 |
| 2 | 1 | sub 1 |
| 3 | 1 | sub 2 |
| 4 | 1 | sub 3 |
| 5 | 4 | subsub 1 |
| 6 | 4 | subsub 2 |
| 7 | 0 | main 2 |
| 8 | 7 | sub 4 |
| 9 | 7 | sub 5 |
mainid
字段与id
字段相关联。
MySQL命令中是否有最佳实践选择所有行递归?我想select
主要项目下的所有子项目。
我尝试在第一级选择所有子项,例如sub 1,sub 2,sub3在main 1下。这很简单:
SELECT id, mainid, name FROM mytable WHERE mainid = '1';
但是有一个单行命令来选择相同的行以及subsub1和subsub 2行吗? (如果我创造另一个更深层次的话,那就更好了。)
答案 0 :(得分:0)
您需要临时表和单独的存储过程
第一个存储过程将收到" parent" id并创建一个结果临时表:
结果(id,mainid,名称)
和检查临时表
检查(id,通过) (这个表是避免无限循环的必要条件)
所以,想法是你调用内部存储过程,内部存储就像这样
PROC(currentId(int))
使用父ID和proc将基本上执行查询所做的操作,但将其保存在内部临时表中,然后对于该临时表的每个元素(不在CHECK中),它将标记为传入检查(只是插入行)并为每个"孩子"调用相同的proc。 of currentId
然后将内部临时表中的所有数据插入到RESULT中,您将拥有整个后代列表
你有两种方式
检查子项然后插入RESULT 要么 插入RESULT然后检查孩子
数据的排序方式不同,但结果应该相同