[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как выбрать несколько записей одним запросом
GRean
Всем привет!
Я плохо разбираюсь в запросах mysql, и хотел бы узнать, реално ли это сделать?

У меня есть таблица например:



id | name | parent
1 | page1 | 0
2
| page2 | 1
3
| page3 | 1
4
| page4 | 3
5
| page5 | 2



Каждая страница имеет ссылку на родителя.

если мы возьмем страницу 4, то что бы узнать его путь до корня нам надо посмотреть на родителя каждой страницы.

page4(parent: 3) -> page3(parent:1) -> page1(parent: 0)

таким образом мы можем узнать хлебные крошки у любой страницы, которая занесена в таблицу.

Можно ли так: "Запросить страницу page4, проверить у этой страницы родителя, если не 0, то запрашиваем следующую страницу(parent: 3)" и т.д.
?


$listpage = mysql_query('page4(parent: 3) -> page3(parent:1) -> page1(parent: 0)');


Как составить запрос таким образом, что бы можно было вытащить страницы 4,3,1 ?



Спустя 40 минут, 33 секунды (3.01.2011 - 03:12) sergeiss написал(а):
http://phpforum.ru/index.php?showtopic=31806&hl= - вот моя тема про такую выборку на Постгре. И там в теме есть ссылки на подобную выборку в MySQL.

Спустя 21 минута, 26 секунд (3.01.2011 - 03:34) inpost написал(а):
WHERE (name="4" OR name="3" OR name="1") AND parent != 0 ORDER BY `name` DESC

Спустя 11 минут, 36 секунд (3.01.2011 - 03:45) GRean написал(а):
Цитата (sergeiss @ 3.01.2011 - 00:12)
http://phpforum.ru/index.php?showtopic=31806&hl= - вот моя тема про такую выборку на Постгре. И там в теме есть ссылки на подобную выборку в MySQL.


Спасибо, почитаю


Цитата (inpost @ 3.01.2011 - 00:34)
WHERE (name="4" OR name="3" OR name="1") AND parent != 0 ORDER BY `name` DESC


а если за ранее не известно уровень вложенности, то есть запрос OR name="3" OR name="1" добавляют статику в запрос, динамически нельзя получается определять всю последовательность?

Спустя 7 часов, 10 минут, 37 секунд (3.01.2011 - 10:56) Michael написал(а):
Почитай по той ссылке от sergeiss, еще я помню Семён про этот алгоритм спрашивал и glock18 готовое решение написал. Ищи по форуму, я быстро найти не смог. Если найдешь - выстави, а то я забыл что там.
Вообще я сталкивался когда с подобным - всю табличку выбирал в массив и по нему дерево строил - несложная операция. Но это если данных не много.

Спустя 30 минут, 28 секунд (3.01.2011 - 11:27) vital написал(а):
Гуглите про Nested Sets

Спустя 22 часа, 44 минуты, 13 секунд (4.01.2011 - 10:11) GRean написал(а):
Прочитал статью от sergeiss. И еще другие темы на форуме.

Michael, я нашел темы, но вот как их здесь выложить не понял, так как в адресной строке только index.php. Пример, указанный glock18 вообще не задевает sql.

sergeiss, научи пожалуйста применять такие вот записи в php:

WITH RECURSIVE id_tree_selection (id, id_parent, id_subcut, id_name, path, tree_index, cycle, depth) as
(
SELECT id, id_parent, id_subcut, id_name, array[row( id, id_parent, id_subcut)],
cast( id as varchar(100)) as tree_index, false, 1
from id_tree where id_parent=0
UNION all
SELECT
main.id, main.id_parent, main.id_subcut, main.id_name, path || row( main.id_parent, main.id_subcut),
cast( cut.tree_index || '.' || main.id_subcut as varchar(100) ) as tree_index,
row ( main.id, main.id_parent, main.id_subcut ) = any( path ), cut.depth +1
FROM id_tree main, id_tree_selection cut
WHERE
cut.id = main.id_parent and not cycle
)


включил в настройках хостинга pgsql

у Nested Sets меня пугает правило правой руки, так вроде называется, когда считаются все элементы на уровне. Как то все запутанно. Куда проще и гибче по моему мнению id|parent, даже не включая глубину, для того, что бы было намного проще переносить целые ветки из одного раздела в другой. Вот только нужно найти решение как одним запросом найти путь до корня через sql запрос. Точнее как правильно составить запрос в mysql?

Второй вариант банальный, но как временное решение (осуждается всеми), искать путь через цикл.


Спустя 2 часа, 32 минуты, 20 секунд (4.01.2011 - 12:43) sergeiss написал(а):
Цитата (GRean @ 4.01.2011 - 11:11)
sergeiss, научи пожалуйста применять такие вот записи в php:

Дык...
Во-первых, уточню: это не в ПХП, а в Постгре. ПХП только получает данные от БД и что-то с ними делает.
Во-вторых, я там, в той теме по ссылке, расписал, как эта шняга работает. Прямо по шагам (как мне кажется smile.gif). Начиная с упрощенного вида и с переходом к полному запросу. Если что-то не понятно конкретное - спрашивай. Если совсем кратко - делается запрос, который обращается сам к себе, с разными параметрами.

Спустя 7 часов, 38 минут, 36 секунд (4.01.2011 - 20:22) GRean написал(а):
А как пользоваться ПостГре? библиотека специальная применяется? у меня на хостинге в качестве модуля стоит pgsql, это то самое?

То есть я правильно понимаю, что такого рода запрос в mysql не составить?

Спустя 4 дня, 3 часа, 45 минут, 31 секунда (9.01.2011 - 00:07) sergeiss написал(а):
Цитата (GRean @ 4.01.2011 - 21:22)
То есть я правильно понимаю, что такого рода запрос в mysql не составить?

Именно с таким синтаксисом, как я написал - да, нельзя. Потому что такого синтаксиса в MySQL нет.
А ты читал по ссылкам из той моей темы про MySQL? Там что-то объясняли, говорили, показывали...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.