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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Многоуровневая система

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
AndrEz
Отправлено: 13 Февраля, 2013 - 09:18:15
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Честно говоря, уже месяц изобретаю велосипед... и он... как ни странно... не получается.
Суть такова - пользователи создают альбом, в альбоме могут создать под альбомы, в под альбомах могут создавать под под альбомы... в общем неограниченная иерархия уровней.
в таблице 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. Надеюсь я смог нормально вс пояснить Закатив глазки
 
 Top
DelphinPRO
Отправлено: 13 Февраля, 2013 - 09:50:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




просто не разрешайте переносить альбомы в под-альбомы. Пусть сначала под-альбом вынесут в другой альбом или верний уровень.

Как в файловой системе - при попытке такого копирования выдается ошибка "Нельзя скопировать каталог сам в себя"


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
AndrEz
Отправлено: 13 Февраля, 2013 - 23:23:32
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Цитата:
просто не разрешайте переносить альбомы в под-альбомы

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


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
При таком раскладе невозможно отобразить список альбомов, в котором будут исключены вложенные подальбомы.

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

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

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
AndrEz
Отправлено: 14 Февраля, 2013 - 07:02:03
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




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

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

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

Спасибо, буду смотреть что это.
 
 Top
caballero
Отправлено: 14 Февраля, 2013 - 10:07:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Религия не запрещает, а вот ресурсы компьютера жалко. В ожин запрос такое не сделать, а несколько выборок за раз - это не экономично.

фигня. Перемещение альбомов не частая операция. Да и уровней вложенности в реальности не будет больше двух трех.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DelphinPRO
Отправлено: 14 Февраля, 2013 - 10:52:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)





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

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB