MySQL查詢(xún)節(jié)點(diǎn)下所有子節(jié)點(diǎn)的方法
在數(shù)據(jù)庫(kù)中,我們會(huì)使用到樹(shù)形結(jié)構(gòu)的數(shù)據(jù),而這種數(shù)據(jù)在查詢(xún)時(shí)往往需要查詢(xún)某個(gè)節(jié)點(diǎn)下的所有子節(jié)點(diǎn),那么該如何查詢(xún)呢?下面我們就來(lái)介紹一種簡(jiǎn)單實(shí)用的查詢(xún)方法。
首先,我們需要有一張數(shù)據(jù)表來(lái)存放樹(shù)形結(jié)構(gòu)數(shù)據(jù),下面是一張示例表:
CREATE TABLE tree ( id INT PRIMARY KEY, name VARCHAR(50), parent_id INT ); INSERT INTO tree (id, name, parent_id) VALUES (1, '節(jié)點(diǎn)1', 0), (2, '節(jié)點(diǎn)1-1', 1), (3, '節(jié)點(diǎn)1-2', 1), (4, '節(jié)點(diǎn)1-3', 1), (5, '節(jié)點(diǎn)1-3-1', 4), (6, '節(jié)點(diǎn)1-3-2', 4), (7, '節(jié)點(diǎn)1-3-2-1', 6), (8, '節(jié)點(diǎn)1-3-2-2', 6);
接下來(lái),我們要查詢(xún)節(jié)點(diǎn)id為1的所有子節(jié)點(diǎn),包括子節(jié)點(diǎn)的子節(jié)點(diǎn),以此類(lèi)推。
SELECT t1.* FROM tree t1, tree t2 WHERE t1.parent_id = t2.id AND t2.id = 1;
代碼解析:
SELECT t1.* //我們要查詢(xún)的表1的所有列 FROM tree t1, tree t2 //從tree表自連接兩次,別名分別為t1和t2 WHERE t1.parent_id = t2.id //要求t1的parent_id等于t2的id AND t2.id = 1; //要求t2的id為1
這樣,就可以查詢(xún)到節(jié)點(diǎn)id為1的所有子節(jié)點(diǎn)。