1. 程式人生 > >MySQL學習筆記(20)——自身連線(無限分類資料表設計)

MySQL學習筆記(20)——自身連線(無限分類資料表設計)

自身連線

無限分類資料表設計:

CREATE TABLE tdb_goods_types
     (
     type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
     type_name VARCHAR(20) NOT NULL,
     parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0
     );

輸入資料:

 INSERT tdb_goods_types(type_name,parent_id) VALUES('家用電器',DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES
('電腦、辦公',DEFAULT);
INSERT tdb_goods_types(type_name,parent_id) VALUES('大家電',1); INSERT tdb_goods_types(type_name,parent_id) VALUES('生活電器',1); INSERT tdb_goods_types(type_name,parent_id) VALUES('平板電視',3); INSERT tdb_goods_types(type_name,parent_id) VALUES('空調',3); INSERT tdb_goods_types(type_name,parent_id) VALUES
('電風扇',4);
INSERT tdb_goods_types(type_name,parent_id) VALUES('飲水機',4); INSERT tdb_goods_types(type_name,parent_id) VALUES('電腦整機',2); INSERT tdb_goods_types(type_name,parent_id) VALUES('電腦配件',2); INSERT tdb_goods_types(type_name,parent_id) VALUES('筆記本',9); INSERT tdb_goods_types(type_name,parent_id) VALUES
('超級本',9);
INSERT tdb_goods_types(type_name,parent_id) VALUES('遊戲本',9); INSERT tdb_goods_types(type_name,parent_id) VALUES('CPU',10); INSERT tdb_goods_types(type_name,parent_id) VALUES('主機',10);

表結構以及資料分類結構:
tdb_goods_types

自連線demo:

SELECT s.type_id AS 類別ID,s.type_name AS 名稱,p.type_name AS 類別 FROM tdb_goods_types AS s
     LEFT JOIN tdb_goods_types AS p
     ON s.parent_id = p.type_id;

自連線

自連線demo2:

SELECT p.type_id,p.type_name,count(s.type_name) AS child_count FROM tdb_goods_types AS p
     LEFT JOIN tdb_goods_types AS s
     ON s.parent_id = p.type_id
     GROUP BY p.type_name
     ORDER BY p.type_id;

自連線2