![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Evgen11 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.3.2010 Репутация: нет Всего: нет |
Здравствуйте. Помогите с такой задачей, уже всю голову сломал.
Есть дерево категорий В БД. В Виде: id | parent Вложеность не ограничена. Перебрать, вывести - это все сделано. При редактировании категории нужны 2 проверки. 1. (Она у меня сделана) Это проверить не является ли категория одновременно и своим родителем - Если да, то выводим сообщение что нельзя так.. 2. Блин не как не могу допереть как сделать проверку что бы редактируемая категория не попала в любую из, в ней лежащих категориий и подкатегорий - потому что при таком раскладе вся ветка пропадёт вовсе... Подскажите пожалуйста, а то я уже весь мозг сломал Это сообщение отредактировал(а) Evgen11 - 26.1.2013, 22:19 |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 3 Всего: 42 |
Вариант 1:
У тебя любая низлежащая категория будет иметь id меньше родительской. Вводим ограничение на каждом уровне может быть не более 10 категорий. Тогда уровень категории определяется как степень 10 При этом каждая низлежащая категория деленая нацело на 10 должна давать номер родительской категории Т.е. для категории 20 дочерними будут 200-209, 2000-2099, 20000-20999 и т.д. Родительской соответственно будет категория 2. Из минусов - при переносе категорий между ветками нужно создавать новую категорию фактически. И соответственно исправлять привязанные к категории элементы. Вариант 2: Не париться с формулами и вычислениями. А тупо запросом выбирать список всех дочерних категорий и сравнивать с ним. Плюс - при переносе категорий между ветками ничего более делать не нужно. Минус - запрос достаточно громоздкий особенно при неограниченной вложенности. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Evgen11 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 9.3.2010 Репутация: нет Всего: нет |
Fortop, Спасибо за советы,
Интересный 1 вариант, не сразу въехал. Может где пригодится. Второй я пробовал так делать - но просто искал более красивое решение. Вообще я на перебор категорий делаю всего 1 запрос. Создаю массив, а потом его разбираю как нужно. А при желании его можно и кэш загнать, и не тратиь даже 1 запроса. Чёт отвлёкся. Вообще сам допёр до такого (уже спать лёг) и о чюдо - свежее решение, встал включил комп и... короче.. Я каждую ветку подкатегорий подгружаю ajax'ом. ну соответственно блокирую ту (option disabled=disabled) которую редактирую, и соответственно все ниж - лежащие тоже отпадают.... Это сообщение отредактировал(а) Evgen11 - 27.1.2013, 11:33 |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 3 Всего: 137 |
Кстати, когда я задавался вопросом "категории в БД MySQL", то я выбрал вариант не с id <=> parent_id, а id => left <=> right, где данные представляются ввиде вложенных друг в друга шаров (ну это если визуально понимать как происходит присвоение left / right). Правда не помню уже почему выбрал именно такой способ.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |