Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Деревовидное меню
 
 автор: BArt Simpson   (27.09.2005 в 12:30)   письмо автору
 
 

может кто подскажет, как сделать деревовидное меню на n уровней, в SQL?

   
 
 автор: cheops   (27.09.2005 в 13:46)   письмо автору
 
   для: BArt Simpson   (27.09.2005 в 12:30)
 

Для этого в таблице вводится два поля - первичный ключ и ссылочное поле, которое ссылается на первичный ключ, если это ссылочное поле равно 0 - это корневая запись, если принимает значение - это подкаталог - а номер указывает на родителя

1 0
2 0
3 0
4 1
5 1
6 2
7 3
8 3
9 3

Тут первый столбец первичный ключ, а второй - ссылочное поле. Записи 1, 2 и 3 являются корневыми. 4 и 5 являются подкаталогами каталога 1, 6 каталога 2 последние три записи имеют в качесте родителя запись 3.

   
 
 автор: BArt Simpson   (27.09.2005 в 14:07)   письмо автору
 
   для: cheops   (27.09.2005 в 13:46)
 

Теорию понял, спасибо

   
 
 автор: BArt Simpson   (27.09.2005 в 14:40)   письмо автору
 
   для: cheops   (27.09.2005 в 13:46)
 

признаю, слабоват в запросах!!!
как теперь это вывести ?

   
 
 автор: napTu3aH   (27.09.2005 в 15:27)   письмо автору
 
   для: BArt Simpson   (27.09.2005 в 14:40)
 

Если я правильно понял

SELECT id, pole FROM $table ORDER BY pole ASC


id- название столбца идентификатора
pole- название ссылочного поля
$table- имя таблицы из которой производитсья выборка

З.Ы. Почитал тему, наверно не правильно понял, приведите структуру таблиц из которых вы хотите получить выборку

   
 
 автор: Loki   (27.09.2005 в 16:35)   письмо автору
 
   для: BArt Simpson   (27.09.2005 в 14:40)
 

для этого надо создать рекурсивную функцию, которой, передавать в качестве параметра id родителя и которая должна вызывать сама себя. Кажется, в учебнике было что-то похожее. В общем, штука неприятная, но разобраться в ней хотябы раз надо.
Вспомнил, в качестве примера можете посмотреть php код этой самой страницы. Тут как раз форум структурируется таким образом.

   
 
 автор: WebTech   (27.09.2005 в 16:49)   письмо автору
 
   для: Loki   (27.09.2005 в 16:35)
 

А можно как-нибудь итерационным способом организовать вывод древовидного списка чего-либо, например, как у Bart'a. По идее, рекурсия подходит для этого как нельзя лучше, но больно уж запутано в ней все... :-(

   
 
 автор: cheops   (27.09.2005 в 22:41)   письмо автору
 
   для: WebTech   (27.09.2005 в 16:49)
 

Можно, но получится ещё хуже и запутанее... обход деревьев это единственная задача, где использование рекурсивных целесообразно (ну покрайней мере в императивных языках программирования).

   
 
 автор: BArt Simpson   (27.09.2005 в 17:02)   письмо автору
 
   для: Loki   (27.09.2005 в 16:35)
 

А естьпримеры рекурсивной функции?

   
 
 автор: cheops   (27.09.2005 в 22:43)   письмо автору
 
   для: BArt Simpson   (27.09.2005 в 17:02)
 

Посмотрите в разделе "Примеры скриптов на PHP" - там приведено несколько скриптов рекурсивного обхода.

   
 
 автор: BArt Simpson   (28.09.2005 в 09:56)   письмо автору
 
   для: cheops   (27.09.2005 в 22:43)
 

Конечно я прочитал про рекурсивную функцию, очень интерестно, все понятно, но что с моим вопросом то?? как отсортеровать в деревовидный вид менюшку из SQL?

   
 
 автор: Loki   (28.09.2005 в 11:25)   письмо автору
 
   для: BArt Simpson   (28.09.2005 в 09:56)
 

Так а что именно непонятно? в своем предыдущем сообщении я вроде описал как это работает.

   
 
 автор: BArt Simpson   (28.09.2005 в 17:22)   письмо автору
 
   для: Loki   (28.09.2005 в 11:25)
 

Мне не понятно ничего!!! какой запрос (чего в запросе с чем сравнивать), и вообще как это выводить в том порядке (деревовидном)!!! может есть примеры такого запроса с его обработкой?

   
 
 автор: BArt Simpson   (29.09.2005 в 11:40)   письмо автору
 
   для: cheops   (27.09.2005 в 13:46)
 

мне очень не удобно, НО МОЖЕТ КТО ОБРАТИТ ВНЕМАНИЕ НА МЕНЯ, С МОЕЙ ПРОБЛЕММОЙ??????

А???

Смысл такой структуры таблици понятен!!! Как это теперь выдернуть из таблици в нормальном виде????

   
 
 автор: cheops   (29.09.2005 в 12:55)   письмо автору
 
   для: BArt Simpson   (29.09.2005 в 11:40)
 

Выдернуть что? У вас имеется таблица и дамп от неё с реальными данными? Имея таблицу уже можно спросить и ответить, как сделать запрос, как его обработать... без таблицы, никто не может быть уверенным, что вы потом сможете воспроизвести ситуацию у себя на локальной машине или собеседники будут говорить об одном и том же, а не о разных вещах.

   
 
 автор: BArt Simpson   (29.09.2005 в 13:37)   письмо автору
 
   для: cheops   (29.09.2005 в 12:55)
 

какой запрос к базе и как потом это сортеровать?

   
 
 автор: cheops   (29.09.2005 в 18:42)   письмо автору
 
   для: BArt Simpson   (29.09.2005 в 13:37)
 

Запрос для решения какой задачи? Например для того, чтобы извлечь одну запись с конкретным первичным ключом запрос может выглядеть следующим образом
SELECT * FROM tbl WHERE id = 1

Для того, чтобы вывести все подкаталоги каталога с id=1, запрос может выглядеть так
SELECT * FROM tbl WHERE id_parent = 1

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования