| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Дублирование древовидной структуры в таблице |
| Автор: Kefir 14.2.2006, 23:43 | ||||
Столкнулся с проблемой. Пока что не знаю как решать. В таблице БД у меня хранится дерево страниц сайта в виде:
Т.е. в parent_id хранится номер старшей (родительской) страницы. Если parent_id = 0, то это корневая станичка. Со временем понадобилось добавление языков. Проблемы начались с фичей "скопировать структуру из другого языка" - т.е. при добавлении языка в БД автоматически добавляется вся структура выбранного пользователем языка (дублируется с тем лишь отличием, что id языка меняется со старого на только что созданный). Сначала я было ринулся делать всё это дело так:
И всё бы ничего (всё прекрасно добавлялось), только вот проблема появилась - парент_ид нельзя так в наглую копировать - структура сразу ломается. его надо заново генерировать. Я очень надеюсь, что эту мою бредятину хоть кто-нибудь поймёт и посоветует как решить эту проблему. |
| Автор: Gold Dragon 15.2.2006, 09:25 |
| прости, но понял что нужно Что должно получится на выходе? |
| Автор: Kefir 15.2.2006, 10:44 | ||||||
Ок. Сейчас постараюсь поподробнее написать.
Это древовидная структура стайта. language равен 0 - это значит, что эти странички на, допустим, русском языке. Если зарисовать структуру по другому, то будет так:
Идём дальше. Редактор сайта должен иметь возможность добавлять языки. Причём при добавлении языка ему задаётся вопрос - "продублировать структуру из другого языка?" и если да, то из какого. Допустим он добавил английский язык (id = 1) и сказал продублировать структуру из русского языка. Тогда к первой таблице в начале поста должны прибавится следующие записи:
Т.е. надо сдублировать записи с language=0 и проставить в них language=1 + переделывать parent_id, т.к. в противном случае записи с английским языком будут ссылаться на родительскую запись из русского языка. Очень надеюсь, что стало попонятнее. |
| Автор: Gold Dragon 16.2.2006, 09:25 | ||||
| Kefir, понятно стало до жути а теперь по структуре... А не проще тупо добавить ещё один столбец, т.е.общий ID
и тогда всё отлично получается
|
| Автор: Kefir 16.2.2006, 16:14 | ||
| Gold Dragon, дело в том, что структура разных языков может быть различна и если юзер захочет привязать новую страничку к этому пролю - то получится ещё дополнительная работа (или я просто не понял твою идею). Вообще, решение я сделал такое, может можно его оптимизировать, но главное - работает:
Вот. Ничего более простого в голову не пришло. |