SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.07.2010 22:03:07

jonik
Участник
Зарегистрирован: 22.07.2010
Сообщений: 1

запросы при древообразной структуре данных

Добрый вечер господа! Прошу прощения, если такая тема уже была, но найти я ее не смог. Посему мой вопрос будет из двух частей.

Вопрос № 1
Как предпочтительнее хранить древообразную структуру, с учетом того, что степень вложенности может все время меняться... Ну понятно вариант № 1 в разных таблицах. Но в случае изменения структуры, придется добавлять и или удалять таблицы... неудобно, а можно вот так:

ID         NAME           IDродителя

1   автомобили                null
2    грузовики                   1
3    книги                         null
4     пиво                         null
5     среднетоннажные         2
6        темное                      4
7         безалкогольное          4

В общем смысл понятен...... если idродителя 0, то это корень.............
любые изменения  структуры будут происходить за счет модификации строк а не таблиц......
Так вот вопрос.... КАК ЛУЧШЕ и ПРАВИЛЬНЕЕ С ТОЧКИ ЗРЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ?

Вопрос №2

Как сделать выборку из такой таблицы при помощи хранимой процедуры? Смысл таков... ввожу в процедуру ID напрмиер 5 и получаю: Автомобили/грузовики/среднетоннажные....

Процедуру то я написал, но етсь проблема....... результат возвращается не в одной результирующей таблице, а в нескольких т.е. ввожу в процедуру ID=5 и получаю табл.1 - в ней строка автомобили, табл.2- строка грузовики, табл.3 строка среднетоннажные.  Это происходит потому, что при каждой итерации цикла внутри процедуры, она возвращает отдельный селект с одним параметром.

Сделал еще вариант, но он мне не нравится...... это загонять все результаты в одну переменную типа TEXT и ставить ее в OUT..... Конечно, если просто надо вывести текст, то это идеальный вариант т.к. нет необходимости особо обрабатываеть его в PHP....... но...... я хочу, чтобы к каждому результату был привязан ID..... а на уровне PHP разбирать строки и вычленять из них нужные ID неохота.....

В голову пришел вариант и мне б очень хотелось узнать, что об этом думают знающие люди!!

Что если при запуске, процедура создавала бы временную таблицу, в которую вставляла бы полученные результаты. И под конец одним SELECT * FROM TEMP TABLE возвращала бы результат в удобоваримом для PHP стандартном виде.

или....... если временные таблицы (например MEMORY) это плохо для производительности, то как тогда в PHP обработать многотабличный результат? Или есть еще какие- то варианты?

Неактивен

 

#2 23.07.2010 13:27:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: запросы при древообразной структуре данных

Отдельные таблицы следует делать тогда, когда элементы могут содержать
различную информацию (т.е. про автомобили следует знать, какого типа
у него коробка передач и какая мощность, а про книги — кто автор и
сколько у нее страниц). Если же этим не задаваться, то такая простая таб-
личка, разумеется, очень хороша.

Проблем с использованием временных таблиц не вижу.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson