关于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 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
在这种情况下,我们不必担心顺序,例如,如果这是html" target="_blank">数据:
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
。然后,我们可以获得最终的预期结果。
如果是这样,您能想到任何排除我刚才提到的解决方案的特殊情况吗?
我一直在想这样的事情是否行得通:
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放入字符串的想法仅限于字符串的容量。
问题内容: 我得到一张下表: 如果用户搜索“ 1”,则程序将查看具有“ 1”的,然后它将在“ 5”中得到一个值,然后程序将继续在其中搜索“ 5”,并且将得到“ 3”在中,依此类推。因此它将打印出: 如果用户搜索“ 6”,它将打印出: 如何建立一个查询来做到这一点? 问题答案: 编辑 @leftclickben提到的解决方案也是有效的。我们也可以对它使用存储过程。 我们使用临时表存储输出结果,并且由
问题内容: 我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。 我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深
问题内容: 我对PLSQL的更高级主题还是陌生的,因此希望有人可以帮助我。 问题: 我有一个表,其中包含管理员和用户之间发送的消息。该表在同一表的message_id字段中具有带FK的message_parent:如果填充了该字段,则意味着该消息是作为对先前消息的答复而发送的。我需要选择属于同一对话的所有消息并显示它们。可以通过单个查询完成此操作,还是需要一个过程来处理这种逻辑?据我了解,它必须是
问题内容: 如何在MySql中运行此查询? 它会显示如下错误消息: 问题答案: 该语句/方法适用于PostgreSQL和Sybase(我想可能还有更多),所以也许您可以看一下: http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html 它应该向您展示一些使用MySQL的方法(以及PHP中的一两个方法,我只知道它不在您的标签列
编写一个方法writeChars,该方法接受整数参数n,并按如下方式输出n个字符。输出的中间字符应始终为星号(“*”)。如果要求您写出偶数个字符,则中间会有两个星号(“**”)。在星号之前,您应写出少于个字符(“ 我已经设法解决了这个问题,但不太明白一句话: 为什么是递归情况: n-2?而不是n-1?
问题内容: 我有一个类似(简化)的表结构: 内容 content_has_content topic_has_content 任何主题都可以具有多个“内容”,任何“内容”都可以具有多个“子内容”(内容实例)。对于给定的id_topic,我想从链接的内容,子内容,子内容的子内容等中接收所有my_string1的列表。 我了解“ WITH”不适用于mysql,但找不到很好的递归替代方法。 谢谢丹尼尔