如何在php中编辑/管理多层条件数据

时间:2009-10-26 03:53:26

标签: php mysql

我在mysql数据库中有4个表,我需要添加/编辑/管理。

难点在于,每个人都依赖于之前的那个。

我在用户端进行此设置的方式是从表1中选择一个选项。 然后,您将看到表2中的选项,这些选项在其行中具有第一个选项的ID。 在表2中选择选项后,您将进入表3,该表生成其列表,其中行包含表2中您选择的ID,依此类推。

问题是如何编辑/管理它。

显然,如果删除表1中的选项,则其后续所有子选项都将无效。

我只需要了解如何管理这样的设置。

2 个答案:

答案 0 :(得分: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);

从table1删除:

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 ...

您的网址结构不会有太大变化,但您可以优化删除伪代码以使用表格本身的子选择。

答案 1 :(得分:0)

多层数据最常存储在表格中的父:子关系字段中。

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

编写递归函数/查询来遍历关系,任何更新/插入/删除都应该相对简单。