MySQL中存儲父子結構的數據時,一種常見的方法是使用遞歸查詢。在這種情況下,父項有一個指向自身的外鍵,這只能是NULL,因為頂級項沒有父項。下面是一個示例表結構:
CREATE TABLE categories ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, parent_id INT(11), PRIMARY KEY (id), FOREIGN KEY (parent_id) REFERENCES categories(id) );
在此示例中,每個項目都可以有一個可選父項。如果parent_id為NULL,則該項是頂級項。下面是一個示例查詢,用于查找所有子項的遞歸列表:
WITH RECURSIVE subcategories AS ( SELECT id, name, parent_id FROM categories WHERE id = ? -- Input the root category ID here UNION ALL SELECT c.id, c.name, c.parent_id FROM categories c JOIN subcategories s ON s.id = c.parent_id ) SELECT * FROM subcategories;
此查詢使用WITH RECURSIVE關鍵字創建了一個遞歸CTE(通用表達式)。它從給定的根類別開始,然后通過遞歸聯接操作檢索子類別,直到沒有更多級別為止。