Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Многоуровневая система
Форумы портала PHP.SU » » Вопросы новичков » Многоуровневая система

Страниц (1): [1]
 

1. AndrEz - 13 Февраля, 2013 - 09:18:15 - перейти к сообщению
Честно говоря, уже месяц изобретаю велосипед... и он... как ни странно... не получается.
Суть такова - пользователи создают альбом, в альбоме могут создать под альбомы, в под альбомах могут создавать под под альбомы... в общем неограниченная иерархия уровней.
в таблице categories сделал 3 столбца - (id, name, up).
up - это id категории, в которой находится текущий альбом.
То есть, предположим есть 6 альбомов в таблице
id name up
1 Альбом1 2
2 Альбом2 4
3 Альбом3 4
4 Альбом4 0
5 Альбом5 0
6 Альбом6 0

(0 - это верхний уровень)

Когда пользователь заходит на страницу списка альбомов, он видит 3 альбома (Альбом4, Альбом5, Альбом6).
Заходя в альбом 4, сайт делает выборку по up=4 и соответственно потом отобразит 2 альбома (Альбом2 и Альбом3). Ну и ответственно. заходя в альбом 2 сайт отображает Альбом1.
А теперь предположим я хочу дать возможность пользователю перенести любой альбом в другой.
При таком раскладе невозможно отобразить список альбомов, в котором будут исключены вложенные подальбомы.
То есть, если пользователь захочет перенести Альбом4 в другой, то необходимо исключить из списка все его под альбомы, а что бы исключить альбом1, необходимо сделать как минимум 2 выборки.
А если допустим пользователь создал 5 уровней альбомов, то необходио будет делать 4 выборки, что бы исключить возможность переноса альбома во все его подъальбомы.


Есть ли какой-нибудь менее извращённый способ реализовать то, что мне нужно?
Создавать каждому пользователю новую таблицу - это не вариант... к сожалению...


P.S. Надеюсь я смог нормально вс пояснить Закатив глазки
2. DelphinPRO - 13 Февраля, 2013 - 09:50:17 - перейти к сообщению
просто не разрешайте переносить альбомы в под-альбомы. Пусть сначала под-альбом вынесут в другой альбом или верний уровень.

Как в файловой системе - при попытке такого копирования выдается ошибка "Нельзя скопировать каталог сам в себя"
3. AndrEz - 13 Февраля, 2013 - 23:23:32 - перейти к сообщению
Цитата:
просто не разрешайте переносить альбомы в под-альбомы

Да, это разумно... не идеально, но разумно
(Добавление)
Просто я уже долгое время не могу придумать, как организовать подобную возможность.
Много раз переделывал структуру mysql, однако ничего внятного так и не придумал.
Просто наверяка кто-то уже реализовывал подобное и сможет поделиться скриптом и структурой БД... ну или хотя бы сылочкой... Ну или хотя бы намекнуть, как вообще такое можно реализовать.
4. caballero - 14 Февраля, 2013 - 00:57:20 - перейти к сообщению
Цитата:
При таком раскладе невозможно отобразить список альбомов, в котором будут исключены вложенные подальбомы.

почему невозможно? религия запрещает?

Цитата:
Просто наверяка кто-то уже реализовывал подобное и сможет поделиться скриптом и структурой БД... ну или хотя бы сылочкой... Ну или хотя бы намекнуть, как вообще такое можно реализовать.

Лично я такое не раз реализовывал создавая дерево по алгоритму материализованных путей - все дочерние независимо от уровня выбираются одним простым запросом. Выборкой в подзапросе можно исключить из общего списка.
5. AndrEz - 14 Февраля, 2013 - 07:02:03 - перейти к сообщению
Цитата:
почему невозможно? религия запрещает?

Религия не запрещает, а вот ресурсы компьютера жалко. В ожин запрос такое не сделать, а несколько выборок за раз - это не экономично.
Если к примеру будут одновременно надо будет делать по 3-7 выборок для каждого пользователя за раз? Это же ужасно и трудоёмко... или я ошибаюсь?

Цитата:
по алгоритму материализованных путей

Спасибо, буду смотреть что это.
6. caballero - 14 Февраля, 2013 - 10:07:15 - перейти к сообщению
Цитата:
Религия не запрещает, а вот ресурсы компьютера жалко. В ожин запрос такое не сделать, а несколько выборок за раз - это не экономично.

фигня. Перемещение альбомов не частая операция. Да и уровней вложенности в реальности не будет больше двух трех.
7. DelphinPRO - 14 Февраля, 2013 - 10:52:18 - перейти к сообщению

Node2 мы перенесем в Node3 (со всеми потомками)
получим
CODE (text):
скопировать код в буфер обмена
  1. Node1
  2. ....Node3
  3. ......Node2
  4. ........Node3
  5. ..........Node2
  6. ............Node3
  7.                ...

во-первых, потеряется связь между Node1 и Node3
во-вторых, появится бесконечная вложнность.
я не прав?

 

Powered by ExBB FM 1.0 RC1