powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос
12 сообщений из 12, страница 1 из 1
Помогите написать запрос
    #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
Помогите написать запрос
    #32995412
Arkady Sempliyaroff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я довольно часто сталкивался с такой задачей.
Насколько я могу судить, одним SELECTом такое сделать невозможно. Потому что SELECT может содержать только заранее известное (конечное) число проверок, а данная задача требует заранее неизвестного количества сравнений. Причем это количество потенциально бесконечно, так как число груп вложенности может оказаться больше любого наперед заданного числа.

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

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

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

всем спасибо :))
...
Рейтинг: 0 / 0
Помогите написать запрос
    #32996010
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попробовать через агрегатные функции это сделать.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #32996018
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опс sorry ,промахнулся
...
Рейтинг: 0 / 0
Помогите написать запрос
    #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
Помогите написать запрос
    #32996939
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatgppl.moonbone.ru
вот спасибо, такая занятная вещица. тока почему то поиск по доке про эту фичу ничего не дал. наверно это их hackers-list?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #33006351
джанкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а эту фичу можно поставить на винду?
сдаёца мне что это нереал
...
Рейтинг: 0 / 0
Помогите написать запрос
    #33006523
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
джанкера эту фичу можно поставить на винду?
сдаёца мне что это нереал
Эту фичу ещё даже не закомитили, но David Fetter заинтересовался этим патчем, значит сдвиги уже есть и возможно в будущих релизах появиться.
По поводу виндовс никаких высказываний не было, впрочем почему бы не начать самим? :)
...
Рейтинг: 0 / 0
Помогите написать запрос
    #33009344
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коллега на работе говорил что поставил, под цигвином скомпилировал виндоыве исходники с патчем... подробности не знаю, но факт - что можно
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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