Mysql の Recursive SELECT クエリに関する質問はたくさんありますが、「Mysql には Recursive SELECT クエリの解決策はありません」という回答がほとんどです。
実際には特定の解決策があり、それを明確に知りたいので、この質問は、( how-to-do-the-recursive-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 に "1" を含む 2 つのレコードと、col1 に "3" を含む 2 つのレコードがある場合は、次のようになります。
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
それで、私の質問は、上記の予想される結果のようにすべてのリンクを表示するように、上記のクエリをどのように変更するのですか?
編集: @ゴードン、しかし、省略した場合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
この場合、たとえばこれがデータである場合、順序は気にしません。
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
。その後、最終的に期待される結果を得ることができます。
もしそうなら、私が今言った解決策を除外する特別なケースを考えてもらえますか?