ホームページ >データベース >mysql チュートリアル >MySQL で単一の文で無制限のレベルの親子関係クエリを実装する方法
SQL Server では、CTE 式を使用して無限レベルの親子関係をクエリするのが簡単です。CTE 式をサポートしていないバージョンでは、関数の再帰を使用して簡単に実現することもできます。
MySQL では、この要件の例は少し複雑です。MySQL には再帰をサポートするクエリがなく、テーブル値関数もなく、関数も再帰をサポートしていないため、通常はループで実装されるようです。気まずい。今日は、単一のステートメントで再帰クエリが実装されているのを見たので、それを共有したいと思います。
おすすめの関連mysqlビデオチュートリアル: "mysqlチュートリアル"
テーブルの構造とデータ
CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table1 VALUES (1, ‘Home’, 0), (2, ‘About’, 1), (3, ‘Contact’, 1), (4, ‘Legal’, 2), (5, ‘Privacy’, 4), (6, ‘Products’, 1), (7, ‘Support’, 2);
ID = 5のすべての親をクエリ
SELECT ID.level, DATA.* FROM( SELECT @id as _id, ( SELECT @id := parent_id FROM table1 WHERE id = @id ) as _pid, @l := @l+1 as level FROM table1, (SELECT @id := 5, @l := 0 ) b WHERE @id > 0 ) ID, table1 DATA WHERE ID._id = DATA.id ORDER BY level;
この親クエリメソッドによれば、チェックするクエリを簡単に作成できますすべての子レベル、次のクエリ id=2 すべての子
SELECT ID.level, DATA.* FROM( SELECT @ids as _ids, ( SELECT @ids := GROUP_CONCAT(id) FROM table1 WHERE FIND_IN_SET(parent_id, @ids) ) as cids, @l := @l+1 as level FROM table1, (SELECT @ids :=’1’, @l := 0 ) b WHERE @ids IS NOT NULL ) id, table1 DATA WHERE FIND_IN_SET(DATA.id, ID._ids) ORDER BY level, id
この記事では、MySQL で無限レベルの親子関係クエリを 1 つの文で実装する方法について説明します。関連コンテンツの詳細については、PHP 中国語 Web サイトを参照してください。
関連する推奨事項:
進行状況に応じて SQL Server FileStream にアクセスする方法
SQL Server 管理者パスワードを忘れた場合の対処方法
MySQL での concat と group_concat の使用の簡単な分析
以上がMySQL で単一の文で無制限のレベルの親子関係クエリを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。