Официальный сайт студ.городка НГТУ
Программирование и БД » подскажите запрос mysql для каталога? 

#1  26.10.06 16:10

подскажите запрос mysql для каталога?

есть каталог:
id ,parent. name
ну задача классическая: parent=0 верхний уровень
например 1,2,3 на верхнем уровне.
как вытащить всю ветку принадлежащую 1 идентификатору?

рекурсивно вызывать функцию, это я могу, но люди хорошо разбирающиеся в скл говорят можно одним запросом выдрать? никто не знает как это сделать?

Offline

#2  26.10.06 22:48

Re: подскажите запрос mysql для каталога?

про. написал(а):

INNER JOIN к самой себе.

можно пример запроса?
и сколько уровней так можно вложить?

Offline

#3  26.10.06 23:38

Re: подскажите запрос mysql для каталога?

Укроп написал(а):

я думаю что при внесенни в таблицу ИДшники должны быть отсортированым деревом.


       5
   3      7
2   4  6   8
тогда если я хочу выбрать правый узел каталога 5 то я выберу id>5

если в каталоге записей больше - то и сынов у ноды должно быть больше )
проблема - при каждой вставке-удалении придется пересортировывать дерево. для SQL это не подходит ;)

Это не я бляяя...

Исправлено Укроп (26.10.06 23:41)

Offline

#4  26.10.06 23:46

Re: подскажите запрос mysql для каталога?

Укроп написал(а):

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

Это не я бляяя...

Offline

#5  26.10.06 23:55

Re: подскажите запрос mysql для каталога?

Укроп написал(а):

кстати вот и решение нашел
должна быть таблица вида

CREATE TABLE `Files` (
  `IDFile` int(11) NOT NULL auto_increment,
  `FileName` varchar(255) NOT NULL default '',
  `URLPath` varchar(255) NOT NULL default '',
  `IsDirectory` tinyint(4) NOT NULL default '0',
  `IDParentDir` int(11) default NULL,
  `FileSize` bigint(20) default NULL,
) TYPE=MyISAM ;


где URLPath - это полный путь вида c:/Distr/games/NFSU2/NFSUG2_CD1
тогда если я хочу взять все файлы и каталоги из c:/Distr/games/ я составляю соотв запрос по маске )

Это не я бляяя...

Offline

#6  27.10.06 09:07

Re: подскажите запрос mysql для каталога?

про., это не ответ, то что Join сам к себе это пнятно но как сделать на нем рекурсию?
Укроп, спасибо за рассуждения, и помощь  в частности, над таким вариантом я думал, по моему сильно усложняется, тогда организация
т.е. мы получим каталог в котором
Id
parent
parents_list
name
и тогда например

Код::

id      parent         parent_list       name
1       0                  0                      root
2       1                  0|1                   child1
3       2                  0|1|2                child_child1
4       1                  0|1                   child2

я об этом уже думал, но мне сказали что именно при первой организации каталога, возможно достать данные 1 ветки, это было на собеседовании, как раз проверяет насколько занешь SQL Ж-)
PS второй вопрос дать ответ запросом есть ли в таблице повторяющиеся записиЖ-), я нашел ответ)

Исправлено Stell Hawk (27.10.06 09:07)

Offline

#7  27.10.06 18:50

Re: подскажите запрос mysql для каталога?

а не проще сделать табилцу вида
id, path, name ...
и делать запорсы типа select * from table where path LIKE '/qweqwe/%'  ?

Offline

#8  27.10.06 21:34

Re: подскажите запрос mysql для каталога?

Укроп написал(а):

XuMiX, боян )

Это не я бляяя...

Offline

Программирование и БД » подскажите запрос mysql для каталога? 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.259 сек.
Выполнено 11 запросов.