powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / выборка с условием вхождения id в генерируемый массив
6 сообщений из 6, страница 1 из 1
выборка с условием вхождения id в генерируемый массив
    #34507560
Guest77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostgreSQL 7.4
Задача следующая - из таблицы привилегий нужно выбрать записи для ролей, доступных конкретному юзеру. Для этого первым запросом я хочу сформировать массив с доступными ролями (здесь все ок), а вторым - выбрать все доступные привилегии для этих ролей (а вот здесь проблема).

priv_ins text[]; user_ins integer;
roles integer[];

counter integer :=0;

record1 record; record2 record;


BEGIN

priv_ins := $1; user_ins := $2;
-- формирую массив и текстовый эквивалент
test := '';
FOR record1 IN SELECT * FROM user_roles WHERE "user"=user_ins LOOP
counter := counter +1;
roles[counter] := record1.role;
IF test='' THEN
test = cast(record1.role as text);
ELSE
test := test || ',' || cast(record1.role as text);
END IF;
END LOOP;
-- массив сформирован, эта часть работает нормально

counter := 0;
FOR record2 IN SELECT * FROM priv WHERE role_user IN (test) LOOP
-- возвращает 0, хотя записи есть
--FOR record2 IN SELECT * FROM priv WHERE role_user IN (roles) LOOP
-- ругается на несоответствие типов
counter :=counter+1;
END LOOP;
return counter;

END;

подскажите правильный синтаксис пожалуйста
...
Рейтинг: 0 / 0
выборка с условием вхождения id в генерируемый массив
    #34507617
.gc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.gc
Гость
а зачем так сложно?
вроде задачка вообще на один запрос:
Код: plaintext
1.
2.
3.
SELECT priv.*
FROM priv JOIN user_roles ON (priv."role_user" = user_roles."role")
WHERE user_roles."user" = user_ins
...
Рейтинг: 0 / 0
выборка с условием вхождения id в генерируемый массив
    #34507631
Guest77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не спорю, в данном случае можно и так
дело в том, что на основании этой выборки будут сформирован массив id являющихся parent-ами для след выборки

структура priv
id
parent
name
role_user // >0 - role <0 -user
value

1. выбираю все роли для юзера
2. выбираю все значения записи для юзера и его ролей, где parent isnull
3. если эта выборка не вносит ясность (по ней нельзя определить есть привилегия или нет) - идет след выбока у которой parent находится в массиве id текущей выборки.
...
Рейтинг: 0 / 0
выборка с условием вхождения id в генерируемый массив
    #34507634
Guest77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
крайне огорчает то, что среди здесь я выбора из массива не вижу
...
Рейтинг: 0 / 0
выборка с условием вхождения id в генерируемый массив
    #34507650
.gc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.gc
Гость
...
Рейтинг: 0 / 0
выборка с условием вхождения id в генерируемый массив
    #34508003
Guest77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо большое, помогло,
у меня походу еще и в пополнении массива ошибка была :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / выборка с условием вхождения id в генерируемый массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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