lancer_serega
@lancer_serega
PHP Developer

PosgreSQL. WHERE в ячейке содержится одно из значений массива. Как правильно составить запрос?

есть поле типа VARCHAR[]
в нем есть {metro1,metro2, ... metroN}
есть php массив типа
$arr = [
    metro3, metro10, metro11
];

нужно чтобы нашел все адреса где в ячейке таблицы есть хоть одно метро из массива php (из примера выше нужно что бы в выборку попали все у кого есть во VARCHAR массиве metro3, metro10 и metro11)

Вот как примерно пытаюсь сделать эту выборку (код не работает)
$sql = '
SELECT * FROM offer 
WHERE IN('.implode($arr).') @> offer.metro';

 // если вместо IN вставить одно значение, например 'metro1' то все норм
$sql = '
SELECT metro
FROM offer
WHERE metro @> '{Шаболовская}'';

// если сделать так то выберет именно те метро которые нужны, но только если у этого offer`a именно одно (искомое) метро а не несколько
$sql = '
SELECT metro
FROM offer
WHERE metro IN('{Шаболовская}','{Римская}','{Савеловская}','{Шаболовская}')';

// запрос выше выберет вот что:
{Шаболовская}
{Савеловская}
{Римская}

А если у offer`a будет два метро (одно из которых искомое а другое неискомое)
{Шаболовская,ЕщеКакоето}
то такой пользователь в выборку не попадет,
а вот если у пользователя просто одно метро (и оно искомое)
напр {Шаболовская}
и мы ищем Шаболовская
то такой пользователь в выборку попадет.

Как Построить запрос чтобы в выборку попали все пользователи если у него есть хоть одно искомое метро (искомые метро лежат в массиве php)?
  • Вопрос задан
  • 514 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
select ... from tablename 
where arraycolumn && array['foo', 'bar']::text[]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы