当我将此逻辑移动到我的脚本语言时,我的应用程序非常慢。我希望有一种方法可以利用MySQL本身。
考虑下表
ID' col1 ' ' col2'
-----------------
1 ' 1 ' ' 2 '
-----------------
2 ' 2 ' ' 3 '
-----------------
3 ' 3 ' ' 4 '
-----------------
4 ' 5 ' ' 4 '
-----------------
有没有办法选择col1为1的所有记录,或者col1是否是前一个匹配的行的col2?
例如,如果我说我需要与1相关的所有记录,我希望得到第1,2和3行。
这是一个查询示例,但它只是第一级深度。
SELECT col2 FROM table WHERE (col1 = 1) OR (col1 IN (SELECT col2 FROM table WHERE (col1 = 1)))
答案 0 :(得分:1)
您需要创建一个循环遍历树的存储过程,直到找不到更多子项为止。有关如何执行此操作,请参阅Recursive mysql select?。
在其他DBMS中,您可以使用WITH RECURSIVE
,但MySQL不支持。在这里阅读更多关于MySQL模拟的内容:
http://guilhembichot.blogspot.de/2013/11/with-recursive-and-mysql.html
基本上它和以前一样,但背后有更多的解释。
可能还有其他方法可以首先存储您的数据,以避免此类循环查询:
What is the most efficient/elegant way to parse a flat table into a tree?
答案 1 :(得分:0)
@ a23上面指出的解决方案指出了更加强大的案例处理。
这是一个在这种情况下有用的查询。
SELECT * FROM test WHERE col1=1
UNION ALL
SELECT a.* FROM test a, test b WHERE a.col2=b.col1 AND a.col1!=1;
希望它有所帮助。