Я построил серию представлений в базе данных 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 в столбце «автора», чтобы определить, существует ли конкретный идентификатор пользователя в этом массиве.Очевидно, что я не могу использовать iLike для этого типа данных, поэтому мне нужно найти другой подход.
Вот пример данных в массиве авторов:
{"(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, Автор, 1, Николай К., Крейдберг, \" \ ", 123456789, т.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, Автор, 2, Джон, Д., Доу, \ "\", 234567890, т, 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, Автор, 3, Джейн, E, Doe, \ "\", 345678901, т, Admin, А, А, А ,, \ "\")», "(2383, т, е, е, \" 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 ,, \ "\") "}
Я хочу иметь возможность запросить представление и выяснить, является ли строка '123456789'(то есть идентификатор пользователя, назначенный Николасу Крайдбергу в массиве) существует в массиве.Мне все равно, какому пользователю он назначен или где он появляется в массиве, все, что мне нужно знать, - это если в любом месте массива появляется «123456789».
Как только я знаю, как написать запроскоторый определяет, является ли указанное выше условие истинным, тогда мое приложение просто выполнит этот запрос, и если строки будут возвращены, он будет знать, что идентификатор пользователя, переданный в запрос, является автором для этой публикации, и будет действовать соответствующим образом.
Спасибо взаранее за любую информацию, которая может быть предоставлена по этой теме.