|
|
|
| может кто подскажет, как сделать деревовидное меню на n уровней, в SQL? | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: cheops
(27.09.2005 в 13:46)
| | Теорию понял, спасибо | |
|
|
|
|
|
|
|
для: cheops
(27.09.2005 в 13:46)
| | признаю, слабоват в запросах!!!
как теперь это вывести ? | |
|
|
|
|
|
|
|
для: BArt Simpson
(27.09.2005 в 14:40)
| | Если я правильно понял
SELECT id, pole FROM $table ORDER BY pole ASC
|
id- название столбца идентификатора
pole- название ссылочного поля
$table- имя таблицы из которой производитсья выборка
З.Ы. Почитал тему, наверно не правильно понял, приведите структуру таблиц из которых вы хотите получить выборку | |
|
|
|
|
|
|
|
для: BArt Simpson
(27.09.2005 в 14:40)
| | для этого надо создать рекурсивную функцию, которой, передавать в качестве параметра id родителя и которая должна вызывать сама себя. Кажется, в учебнике было что-то похожее. В общем, штука неприятная, но разобраться в ней хотябы раз надо.
Вспомнил, в качестве примера можете посмотреть php код этой самой страницы. Тут как раз форум структурируется таким образом. | |
|
|
|
|
|
|
|
для: Loki
(27.09.2005 в 16:35)
| | А можно как-нибудь итерационным способом организовать вывод древовидного списка чего-либо, например, как у Bart'a. По идее, рекурсия подходит для этого как нельзя лучше, но больно уж запутано в ней все... :-( | |
|
|
|
|
|
|
|
для: WebTech
(27.09.2005 в 16:49)
| | Можно, но получится ещё хуже и запутанее... обход деревьев это единственная задача, где использование рекурсивных целесообразно (ну покрайней мере в императивных языках программирования). | |
|
|
|
|
|
|
|
для: Loki
(27.09.2005 в 16:35)
| | А естьпримеры рекурсивной функции? | |
|
|
|
|
|
|
|
для: BArt Simpson
(27.09.2005 в 17:02)
| | Посмотрите в разделе "Примеры скриптов на PHP" - там приведено несколько скриптов рекурсивного обхода. | |
|
|
|
|
|
|
|
для: cheops
(27.09.2005 в 22:43)
| | Конечно я прочитал про рекурсивную функцию, очень интерестно, все понятно, но что с моим вопросом то?? как отсортеровать в деревовидный вид менюшку из SQL? | |
|
|
|
|
|
|
|
для: BArt Simpson
(28.09.2005 в 09:56)
| | Так а что именно непонятно? в своем предыдущем сообщении я вроде описал как это работает. | |
|
|
|
|
|
|
|
для: Loki
(28.09.2005 в 11:25)
| | Мне не понятно ничего!!! какой запрос (чего в запросе с чем сравнивать), и вообще как это выводить в том порядке (деревовидном)!!! может есть примеры такого запроса с его обработкой? | |
|
|
|
|
|
|
|
для: cheops
(27.09.2005 в 13:46)
| | мне очень не удобно, НО МОЖЕТ КТО ОБРАТИТ ВНЕМАНИЕ НА МЕНЯ, С МОЕЙ ПРОБЛЕММОЙ??????
А???
Смысл такой структуры таблици понятен!!! Как это теперь выдернуть из таблици в нормальном виде???? | |
|
|
|
|
|
|
|
для: BArt Simpson
(29.09.2005 в 11:40)
| | Выдернуть что? У вас имеется таблица и дамп от неё с реальными данными? Имея таблицу уже можно спросить и ответить, как сделать запрос, как его обработать... без таблицы, никто не может быть уверенным, что вы потом сможете воспроизвести ситуацию у себя на локальной машине или собеседники будут говорить об одном и том же, а не о разных вещах. | |
|
|
|
|
|
|
|
для: cheops
(29.09.2005 в 12:55)
| | какой запрос к базе и как потом это сортеровать? | |
|
|
|
|
|
|
|
для: BArt Simpson
(29.09.2005 в 13:37)
| | Запрос для решения какой задачи? Например для того, чтобы извлечь одну запись с конкретным первичным ключом запрос может выглядеть следующим образом
SELECT * FROM tbl WHERE id = 1
|
Для того, чтобы вывести все подкаталоги каталога с id=1, запрос может выглядеть так
SELECT * FROM tbl WHERE id_parent = 1
|
| |
|
|
|