2009-10-26 31 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结构不会有太大变化,但您的删除伪代码可以被优化以在表格本身上使用子选择。