2009-10-26 82 views
1

我在一個mysql數據庫中有4個表,我需要添加/編輯/管理。如何在php中編輯/管理多層次條件數據

困難在於,每一個都依賴於它之前的那個。

我在用戶端使用此設置的方式是,您是否從表1中選擇一個選項。 然後,您會看到表2中的選項,它們的行中有第一個選項的ID。 一旦您選擇了表2中的選項,您將被帶到表3,該表生成其列表,其中行包含您在表2中選擇的ID,依此類推等等。

問題是如何編輯/管理它。

很明顯,如果你刪除表1中的一個選項,它後面的所有子選項都將失效。

我只需要一個如何管理這樣的設置的想法。

回答

0

多層數據最常存儲在表中的父:子關係字段中。

 
id | name | parent_id 
---------------------- 
1 | Mom | NULL 
2 | Son | 1 

寫一個遞歸函數/查詢來遍歷關係,任何更新/插入/刪除應該相對簡單。

1

沒有很多細節很難在你確切的情況發表評論,但這裏的組織你的MySQL數據庫結構的方式:

TABLE table1 
    INT id 
    ... other data ... 

TABLE table2 
    INT id 
    INT table1_id FOREIGN_KEY table1 
    ... other data ... 

TABLE table3 
    INT id 
    INT table2_id FOREIGN_KEY table2 
    ... other data ... 

TABLE table4 
    INT id 
    INT table3_id FOREIGN_KEY table3 
    ... other data ... 

併爲您的網站網址結構可能是:

/table1/add 
/table2/add?table1_id=T1_ID 
/table3/add?table2_id=T2_ID 
/table4/add?table3_id=T3_ID 
/table1/(edit,delete)/T1_ID 
/table2/(edit,delete)/T2_ID 
/table3/(edit,delete)/T3_ID 
/table4/(edit,delete)/T4_ID 

用於添加到table2,3,4:

INSERT INTO table2 (data, table1_id) VALUES(data, T1_ID); 

對於從表1刪除:

DELETE FROM table1 WHERE id = T1_ID; 
$t2_ids = SELECT id FROM table2 WHERE table1_id = T1_ID; 
DELETE FROM table2 WHERE table1_id = T1_ID; 
$t3_ids = SELECT id FROM table3 WHERE table2_id IN ($t2_ids); 
DELETE FROM table3 WHERE table2_id = $t2_ids; 
$t4_ids = SELECT id FROM table4 WHERE table3_id IN ($t3_ids); 
DELETE FROM table4 WHERE table3_id = $t3_ids; 

等等,如果你是從子表中刪除。

另外,如果你在每個表中的數據也不是很不同的,你可以使用一個表來維護父/子關係

TABLE table 
INT id 
INT parent_id 
... other data ... 

你的URL結構不會有太大變化,但您的刪除僞代碼可以被優化以在表格本身上使用子選擇。