Подтвердить что ты не робот

Postgresql Выберите строки, где column = array

Это краткое изложение того, что я пытаюсь сделать:

$array[0] = 1;
$array[1] = 2;

$sql = "SELECT * FROM table WHERE some_id = $array"

Очевидно, что есть некоторые проблемы с синтаксисом, но это то, что я хочу сделать, и я еще не нашел ничего, что показывает, как это сделать.

В настоящее время мой план состоит в том, чтобы сделать что-то в этом направлении:

foreach($idList as $is)
    $where .= 'some_id=' . $id . ' OR';
endforeach
$sql = "SELECT * FROM table WHERE " . $where;

Итак, есть поддержка в PostgreSQL для использования массива для поиска или мне нужно сделать что-то похожее на мое решение?

4b9b3361

Ответ 1

SELECT  *
FROM    table
WHERE   some_id = ANY(ARRAY[1, 2])

или ANSI -compatible:

SELECT  *
FROM    table
WHERE   some_id IN (1, 2)

Синтаксис ANY является предпочтительным, поскольку массив в целом может быть передан в связанной переменной:

SELECT  *
FROM    table
WHERE   some_id = ANY(?::INT[])

Вам нужно передать строковое представление массива: {1,2}

Ответ 2

   $array[0] = 1;
   $array[2] = 2;
   $arrayTxt = implode( ',', $array);
   $sql = "SELECT * FROM table WHERE some_id in ($arrayTxt)"

Ответ 3

Для использования динамического SQL:

'IN(' ||array_to_string(some_array, ',')||')'

Пример

DO LANGUAGE PLPGSQL $$

DECLARE
    some_array bigint[];
    sql_statement text;

BEGIN

    SELECT array[1, 2] INTO some_array;
    RAISE NOTICE '%', some_array;

    sql_statement := 'SELECT * FROM my_table WHERE my_column IN(' ||array_to_string(some_array, ',')||')';
    RAISE NOTICE '%', sql_statement;

END;

$$;

Результат: NOTICE: {1,2} NOTICE: SELECT * FROM my_table WHERE my_column IN(1,2)