关于Mysql中的递归SELECT查询有很多问题,但是大多数答案是“ Mysql中没有递归SELECT查询的解决方案”。
其实有一定的解决方案,我想清楚地知道,所以这个问题是可以在(how-to-do-the-cursive-select-query-in- mysql)中找到的先前问题的以下内容
假设您有此表:
col1 - col2 - col3 1 - a - 5 5 - d - 3 3 - k - 7 6 - o - 2 2 - 0 - 8
&您想在col1中找到所有连接到值“ 1”的链接,即您要打印出:
1 - a - 5 5 - d - 3 3 - k - 7
然后,您可以使用以下简单查询:
select col1, col2, @pv:=col3 as 'col3' from table1 join (select @pv:=1)tmp where col1=@pv
好的,但是,如果您的表在col1中有2条记录包含“ 1”,而在col1中有2条记录包含“ 3”,例如:
col1 - col2 - col3 1 - a - 5 1 - m - 9 5 - d - 3 3 - k - 7 6 - o - 2 3 - v - 10 2 - 0 - 8
然后,当用户在col1中搜索“ 1”时,应显示连接到2“ 1”的所有链接,即应显示以下预期结果:
col1 - col2 - col3 1 - a - 5 1 - m - 9 5 - d - 3 3 - k - 7 3 - v - 10
所以,我的问题是 我们如何修改上面的查询,以便它能像上面的预期结果一样显示所有链接?
编辑: @ Gordon,但是如果我们省略select distinct col1, col2 from此查询,则意味着什么,您可以对此进行处理(因为childID增加了,所以我们可以对table1进行排序):
select distinct col1, col2 from
select col1, col2, @pv:=(case when find_in_set(col3, @pv) then @pv else concat(@pv, ',', col3) end) as 'col3' from (select * from table1 order by col1) tb1 join (select @pv:='1') tmp on find_in_set(col1, @pv) > 0
在这种情况下,我们不必担心顺序,例如,如果这是数据:
col1 - col2 - col3 4 - a - 5 1 - d - 2 1 - k - 4 2 - o - 3 6 - k - 8 8 - o - 9
输出将是:
col1 - col2 - col3 1 - d - 1,2 1 - k - 1,2,4 2 - o - 1,2,4,3
所以我们得到1,2,4,3正确的结果吗?&如果col1在,我们只选择所有记录1,2,4,3。然后,我们可以获得最终的预期结果。
1,2,4,3
如果是这样,您能想到任何排除我刚才提到的解决方案的特殊情况吗?
我一直在想这样的事情是否行得通:
select distinct col1, col2 from (select col1, col2, @pv:=(case when find_in_set(col3, @pv) then @pv else concat(@pv, ',', col3) end) as 'col3' from table1 join (select @pv:='1') tmp on find_in_set(col1, @pv) > 0 ) t
这样的事情应该适用于小型数据集。但是,将所有id放入字符串的想法仅限于字符串的容量。