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 :: adjacency list

 PHP.SU

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


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

> Без описания
melomaniac
Отправлено: 06 Августа, 2015 - 22:12:11
Post Id



Новичок


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


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




Есть таблица вида

id parent_id

Как поднятся вверх зная текущее id, т.е. примеру есть категория subcat2, которая принадлежит cat1 Как зная id subcat2 поднятся вверх до конца, т.е. до самой верхней категории ?
 
 Top
Мелкий Супермодератор
Отправлено: 06 Августа, 2015 - 22:38:26
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




В цикле запрашиваете where parent_id = id с прошлой итерации (на первой итерации изначально известный id)
Запросы такого плана - основное слабое место adjacency list.


-----
PostgreSQL DBA
 
 Top
melomaniac
Отправлено: 07 Августа, 2015 - 01:56:56
Post Id



Новичок


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


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




Логику то я более-менее понимаю, а вот как реализовать это в коде ? Растерялся
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Августа, 2015 - 08:26:04
Post Id



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


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


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




melomaniac пишет:
adjacency list
Это совсем не айди-парент_айди: https://en[dot]wikipedia[dot]org/wiki/Adjacency_list и описываемых тобой проблем у adjacency list нет.
 
 Top
Мелкий Супермодератор
Отправлено: 07 Августа, 2015 - 10:51:31
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




DeepVarvar пишет:
Это совсем не айди-парент_айди

Да нет, как раз частное проявление его самого. Только храним не граф, а дерево - потому не храним связи между элементами одного уровня. Но это не перестаёт являться списком смежности.

Проблема получения пути до корня ещё как есть. Один узел даже при хранении графа, а не дерева, хранит только указатели на узлы, с ним связанные непосредственно. Построить путь до какого-то элемента - вполне себе неподходящая задача для списка смежности.

melomaniac пишет:
Логику то я более-менее понимаю

Старый трюк, описанный, по крайней мере, у Макконнелла: напишите псевдокод. Потом напишите псевдокод подробнее. Через несколько итераций написать реальный код будет проще, чем конкретизировать псевдокод.
Ну или окажется, что логику вы и не понимаете.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 07 Августа, 2015 - 13:08:47
Post Id



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


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


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




Так главное у adjacency list -- граф.
Так то у меня в велосипеде нестедсет, но айди-парент_айди тоже есть.
Что ж его, тоже считать частным случаем?
 
 Top
Мелкий Супермодератор
Отправлено: 07 Августа, 2015 - 13:40:16
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Нет, главное в adjacency list - список связей.
Для графа - это связи со всеми соседями. Для дерева - с вышестоящим узлом.
Nested Sets - где тут указатели на другие элементы? Каждый элемент NS ничего не знает о других элементах. Есть некое значение правого и левого ключа. (и потому NS нельзя покрыть внешними ключами)


-----
PostgreSQL DBA
 
 Top
melomaniac
Отправлено: 07 Августа, 2015 - 19:25:59
Post Id



Новичок


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


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




Всем спасибо, решил вопрос Улыбка
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Августа, 2015 - 12:33:57
Post Id



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


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


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




Мелкий пишет:
NS нельзя покрыть внешними ключами
Ну, у меня же как-то покрылось.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Августа, 2015 - 13:12:45
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




DeepVarvar, запили тогда статейку. Рефернсный NS внешними ключами покрыть невозможно.


-----
PostgreSQL DBA
 
 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