Я построил серию представлений в базе данных PostgreSQL, которая включает в себя пару столбцов массива. Определение вида следующее:
create view articles_view as
(select articles.*,
array(select row(people.*)::people
from people
where articles.spubid=people.spubid and
people.stype='Author' and
bactive='t'
order by people.iorder) as authors,
array(select row(people.*)::people
from people
where articles.spubid=people.spubid and
people.stype='Editor' and
bactive='t'
order by people.iorder) as editors,
array(select row(people.*)::people
from people
where articles.spubid=people.spubid and
people.stype='Reviewer' and
bactive='t'
order by people.iorder) as reviewers,
array(select row(status.*)::status
from status
where articles.spubid=status.spubid and
bactive='t') as status
from articles
where articles.bactive='t');
По сути, я хочу сделать iLike на колонке 'author', чтобы определить, существует ли определенный идентификатор пользователя в этом массиве. Очевидно, что я не могу использовать iLike на этом типе данных, поэтому мне нужно найти другой подход.
Вот пример данных в массиве 'authors':
{"(2373,t,f,f,\"2011-08-01 11:57:40.696496\",/Pubs/pubs_edit_article.php,\"2011-08-09 15:36:29.281833\",000128343,A00592,Author,1,Nicholas,K.,Kreidberg,\"\",123456789,t,Admin,A,A,A,0,\"\")","(2374,t,f,f,\"2011-08-01 11:57:40.706617\",/Pubs/pubs_edit_article.php,\"2011-08-09 15:36:29.285428\",000128343,A00592,Author,2,John,D.,Doe,\"\",234567890,t,IT,A,A,A,0,\"\")","(2381,t,f,f,\"2011-08-09 14:45:14.870418\",000128343,\"2011-08-09 15:36:29.28854\",000128343,A00592,Author,3,Jane,E,Doe,\"\",345678901,t,Admin,A,A,A,,\"\")","(2383,t,f,f,\"2011-08-09 15:35:11.845283\",567890123,\"2011-08-09 15:36:29.291388\",000128343,A00592,Автор,4,Test,T,Testerton,\"\",TestTesterton,f,N/A,A,A,A,A,\"\")"}
Я хочу, чтобы мне удалось сделать запрос вида и выяснить, существует ли в массиве строка '123456789' (т.е. идентификатор пользователя, присвоенный Николаю Крейдбергу в массиве). Меня не волнует, какому пользователю он назначен и где он появляется в массиве, все, что мне нужно знать, так это появится ли где-нибудь в массиве '123456789'.
Как только я узнаю, как записать запрос, определяющий, что условие, приведенное выше, верно, мое приложение просто выполнит этот запрос, и если строки будут возвращены, то оно будет знать, что идентификатор пользователя, переданный на запрос, является автором для этой публикации, и будет действовать соответственно.
Заранее спасибо за любое понимание, которое может быть предоставлено по этой теме.