什麼是排序像這樣的表的最佳方法:爲了SQL樹層次
CREATE TABLE category(
id INT(10),
parent_id INT(10),
name VARCHAR(50)
);
INSERT INTO category (id, parent_id, name) VALUES
(1, 0, 'pizza'), --node 1
(2, 0, 'burger'), --node 2
(3, 0, 'coffee'), --node 3
(4, 1, 'piperoni'), --node 1.1
(5, 1, 'cheese'), --node 1.2
(6, 1, 'vegetariana'), --node 1.3
(7, 5, 'extra cheese'); --node 1.2.1
要通過ID或名稱排序分級它:
'比薩' //節點1
'piperoni' //節點1.1
'奶酪' //節點1.2
'額外的奶酪' //節點1.2.1
'vegetariana' //節點1.3
「漢堡」 //節點2
「咖啡」 //節點3
編輯:在名稱的端部的數量是形象化strucutre更好,這是不進行排序。
編輯2:如多次提到...在的name
「奶酪1.2」末尾的數字只是爲了可視化目的,而不是爲排序。我將他們作爲評論移動,太多人感到困惑,抱歉。
Oracle有一種方法可以通過'START WITH parent_id = 0 CONNECT BY PRIOR id = parent_id ORDER SIBLINGS BY id ASC'來完成。我認爲MySQL沒有這樣的分層查詢。 – Benoit 2013-02-15 07:53:40
@Benoit:實際上幾乎所有的DBMS *除少數(包括MySQL)*之外都可以使用遞歸公用表表達式來做類似的事情。 – 2013-02-15 09:01:25
是已經定義的tabel結構還是您正在規劃階段並可以選擇其他結構?你打算在桌上有多少個參賽作品?它經常被修改,還是對它有許多讀取權限很重要? – 2013-02-19 08:34:19