Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 12 сообщений из 12, страница 1 из 1
03.04.2005, 17:21
    #32995263
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
есть таблица:

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE a
(
  id serial,
  name varchar( 30 ),
  parent_id int4,
  is_group bool
)

в которой parent_id и is_group предназначены для определения групп чего либо
(например товары)
количество уровеней вложенности групп не ограничено

как должен выглядеть запрос отображающий все родительские группы какой либо указанной группы?
...
Рейтинг: 0 / 0
03.04.2005, 23:45
    #32995412
Arkady Sempliyaroff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Я довольно часто сталкивался с такой задачей.
Насколько я могу судить, одним SELECTом такое сделать невозможно. Потому что SELECT может содержать только заранее известное (конечное) число проверок, а данная задача требует заранее неизвестного количества сравнений. Причем это количество потенциально бесконечно, так как число груп вложенности может оказаться больше любого наперед заданного числа.

Буду весьма признателен всякому, кто сумеет опровергнуть изложенное соображение, так как иметь SELECT подобный описанному --- моя голубая мечта :)
...
Рейтинг: 0 / 0
04.04.2005, 04:19
    #32995469
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Использовать функцию, возвращающую набор parent_id для заданного id по условиям задачи нельзя?
...
Рейтинг: 0 / 0
04.04.2005, 10:24
    #32995742
URIX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
Возможно, тут имеет смысл написать функцию, возвращающую таблицу (через return next <record>), и обращаться к ней:
select x.<поле>, .... x.<поле>
from func_name(arg0,..., argn) as x(<поле>, .... <поле>)
а в функции уже можно творить что угодно, включая кеширование и т.п.
з.ы. главное, в цикле сделать ограничение или проверку на повтор parent_id (хоть через стек в какой-нибудь временной табличке), чтоб на бесконечную рекурсию/цыкл не нарваться, в случае нарушения целостности.
...
Рейтинг: 0 / 0
04.04.2005, 11:08
    #32995860
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
задача состоит в том чтобы написать это одним запросом sql

но похоже что Arkady Sempliyaroff прав
и таким образом эту задачу не решить

напишу функцию на plpgsql которая либо скинет в массив все необходимые данные и затем вернёт их
либо будет скидывать их во временную таблицу

всем спасибо :))
...
Рейтинг: 0 / 0
04.04.2005, 11:58
    #32996010
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
можно попробовать через агрегатные функции это сделать.
...
Рейтинг: 0 / 0
04.04.2005, 12:00
    #32996018
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
опс sorry ,промахнулся
...
Рейтинг: 0 / 0
04.04.2005, 13:07
    #32996192
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
gppl.moonbone.ru
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
# select * from pr_areas connect by prior arid=prid start with arid= 503700 ;
   arid    |     area      |  prid  | ordn | aord | uaor | alev | snum | unum | pnum |                      path                       | _level_
-----------+---------------+--------+------+------+------+------+------+------+------+-------------------------------------------------+---------
     503700  | Чеховский р-н |  500000  |     0  |   397  |   399  |     3  |     0  |     0  |     0  | Чеховский р-н::Московская обл::Центр            |        1 
  503700090  | Новый Быт     |  503700  |     0  |   398  |   398  |     4  |     0  |     0  |     0  | Новый Быт::Чеховский р-н::Московская обл::Центр |        2 
     503701  | Чехов         |  503700  |     0  |   399  |   399  |     4  |     0  |     0  |     0  | Чехов::Чеховский р-н::Московская обл::Центр     |        2 
( 3  rows)

# select * from pr_areas connect by prior prid=arid start with arid= 503700 ;
  arid  |      area      |  prid  | ordn | aord | uaor | alev | snum | unum | pnum |                 path                 | _level_
--------+----------------+--------+------+------+------+------+------+------+------+--------------------------------------+---------
  503700  | Чеховский р-н  |  500000  |     0  |   397  |   399  |     3  |     0  |     0  |     0  | Чеховский р-н::Московская обл::Центр |        1 
  500000  | Московская обл |    1111  |     0  |   214  |   414  |     2  |     0  |     0  |     0  | Московская обл::Центр                |        2 
    1111  | Центр          |       0  |    15  |     3  |   570  |     1  |     0  |     0  |     0  | Центр                                |        3 
( 3  rows)
...
Рейтинг: 0 / 0
04.04.2005, 19:34
    #32996939
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
LeXa NalBatgppl.moonbone.ru
вот спасибо, такая занятная вещица. тока почему то поиск по доке про эту фичу ничего не дал. наверно это их hackers-list?
...
Рейтинг: 0 / 0
09.04.2005, 13:15
    #33006351
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
а эту фичу можно поставить на винду?
сдаёца мне что это нереал
...
Рейтинг: 0 / 0
09.04.2005, 18:10
    #33006523
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
джанкера эту фичу можно поставить на винду?
сдаёца мне что это нереал
Эту фичу ещё даже не закомитили, но David Fetter заинтересовался этим патчем, значит сдвиги уже есть и возможно в будущих релизах появиться.
По поводу виндовс никаких высказываний не было, впрочем почему бы не начать самим? :)
...
Рейтинг: 0 / 0
11.04.2005, 20:40
    #33009344
centur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать запрос
коллега на работе говорил что поставил, под цигвином скомпилировал виндоыве исходники с патчем... подробности не знаю, но факт - что можно
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]