Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / выборка с условием вхождения id в генерируемый массив / 6 сообщений из 6, страница 1 из 1
06.05.2007, 12:20
    #34507560
Guest77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка с условием вхождения id в генерируемый массив
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
06.05.2007, 13:38
    #34507617
.gc
.gc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка с условием вхождения id в генерируемый массив
а зачем так сложно?
вроде задачка вообще на один запрос:
Код: 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
06.05.2007, 14:02
    #34507631
Guest77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
выборка с условием вхождения id в генерируемый массив
не спорю, в данном случае можно и так
дело в том, что на основании этой выборки будут сформирован массив id являющихся parent-ами для след выборки

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

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


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