как редактировать / управлять многоуровневыми условными данными в php - PullRequest
1 голос
/ 26 октября 2009

У меня есть 4 таблицы в базе данных mysql, которые мне нужно добавить / редактировать / управлять.

Сложность заключается в том, что каждый из них зависит от предыдущего.

То, как у меня есть эта настройка на стороне пользователя, это то, что вы выбираете опцию из таблицы 1. Затем вам будут предложены опции в таблице 2, у которых в строке есть идентификатор первой опции. Как только вы выберете опцию в таблице 2, вы попадете в таблицу 3, которая генерирует ее список, в котором строки содержат идентификатор вашего выбора в таблице 2 и т. Д. И т. Д.

Проблема в том, как отредактировать / управлять этим.

Очевидно, что если вы удалите параметр в таблице 1, все последующие дочерние параметры будут недействительными.

Мне просто нужно знать, как управлять настройкой, подобной этой.

Ответы [ 2 ]

1 голос
/ 26 октября 2009

Без подробностей трудно прокомментировать вашу конкретную ситуацию, но вот способ организовать структуру базы данных 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 ...

И ваша структура URL для вашего сайта может быть:

/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

Для добавления в таблицу2,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 не сильно изменится, но ваш псевдокод может быть оптимизирован для использования подвыборов в самой таблице.

0 голосов
/ 26 октября 2009

Многоуровневые данные чаще всего хранятся в поле родительских: дочерних отношений в таблице.

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

Написать рекурсивную функцию / запрос для пересечения отношений, и любые обновления / вставки / удаления должны быть относительно простыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...