|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.04.2009, 13:00 | #1 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Выбрать все элементы из ветки дерева MYSQL
Вот собственно структура такова:
id, parentid, ... как обычно, parentid определяет к какой "ветке дерева" принадлежит текущая строка.... Ну и вот у меня есть такое дерево tree(id=1)- ------sub1(id=2) ------sub2(id=3) -----------sub21(id=4) ----------------sub211(id=8) ----------------sub212(id=9) -----------sub22(id=5) -----------sub23(id=6) ------sub3(id=7) ..... Примерно так. Я хочу выбрать все элементы и подэлементы из ветки sub2(id=3). Если я сделаю так: SELECT * FROM table_name WHERE parentid=3 то выберуться элементы sub21, sub22, sub23. А мне нужно выбрать все, в том числе и sub211, sub212. Какой тут будет запрос? Последний раз редактировалось iankov; 12.04.2009 в 23:34. |
13.04.2009, 02:36 | #2 |
Редкий обитатель
Форумчанин
Регистрация: 08.04.2009
Сообщений: 170
|
Код:
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
|
14.04.2009, 15:36 | #3 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Ох нифига себе, а простое решение в Mysql существует вообще?
Или единственное решение, это вручную проходить по всем веткам? И еще меня терзают смутные сомнения в выше описанном коде по поводу загрузки сервера... Не проще ли будет пробежаться по нужно ветке и сделать несколько простых запросов типа: select * from content where parentid=3 а затем еще запрос select * from content where parentid=4 .... пройти по всей ветке дерева с запросами Последний раз редактировалось iankov; 14.04.2009 в 15:40. |
14.04.2009, 22:10 | #4 |
Редкий обитатель
Форумчанин
Регистрация: 08.04.2009
Сообщений: 170
|
такой вариант подойдет только для частного случая - существующего на данный момент, а если ты добавишь еще один вложенный уровень, то ты его не увидишь
хотя мой код тоже для частного случая, так как работает только с веткой Id = 3 (т.е. для 7 он не прокатит, если только вместо 3 не посылать определенную переменную, содержащую нужную ID), но он увидит любую вложенность а насчет других способов решения я не в курсе, может кто еще напишет... код вроде старалась упрощать... но в любом случае, рада, если хоть чем-то смогла помочь
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
Последний раз редактировалось koma_grusha; 14.04.2009 в 22:17. |
15.04.2009, 10:18 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,238
|
а что тольку автору вопроса даст теория, КАК ещё можно решить данную задачу.
ну, например, в Oracle есть мощнейший механизм select start with ... connect by prior ... Код:
Цитата:
тут либо крутить цикл, выбирая каждый раз новый уровень, ссылающийся на предыдущий (первый уровень задаётся), потом выборка тех, кто ссылается на результаты предыдущей выборки. либо, искусствено ограничить количество выбираемых (по вложенности) уровней. Тогда можно состряпать SQL запрос... хотя... думаю, что он будет тоже не совсем простым.. |
|
28.04.2009, 09:22 | #6 |
Форумчанин
Регистрация: 14.01.2009
Сообщений: 312
|
Ну вот можно попробовать что-то вроде этого:
Select * from Table_name Where prnt_id in ( Select id From Table_name Where prnt_id=3) and prnt_id=3
Никому не поставить нас на колени! Мы лежали и будем лежать!
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
QuickRep не все элементы отображаются при просмотре | xxxsas | Общие вопросы C/C++ | 1 | 12.04.2009 08:33 |
как перебрать все элементы на форме? | Аlex | Общие вопросы C/C++ | 1 | 07.02.2009 03:46 |
Составить программу которая будет сортировать все положительные элементы | Wast | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 22.12.2008 15:56 |
Если все элементы матрицы четные, вычислить их произведение. | Misho0k | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 20.05.2008 22:51 |
в начале все отрицательные, затем все положительные элементы в матрице | motaro | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 07.03.2008 19:16 |