113

これは私がやろうとしていることの要約です:

$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には配列を使用して検索するためのサポートがありますか、それとも私のソリューションと同様のことをする必要がありますか?

4

4 に答える 4

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

またはANSI互換性:

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

ANY配列全体をバインドされた変数で渡すことができるため、構文が推奨されます。

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

配列の文字列表現を渡す必要があります。{1,2}

于 2012-05-24T13:28:33.970 に答える
7

動的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)

于 2017-03-23T09:09:28.700 に答える
5

私の場合、データを含む列を操作する必要があったため、IN()を使用しても機能しませんでした。彼の例を提供してくれた@Quassnoiに感謝します。これが私の解決策です:

SELECT column(s) FROM table WHERE expr|column = ANY(STRING_TO_ARRAY(column,',')::INT[])

ポストにつまずく前に、私はほぼ6時間過ごしました。

于 2020-09-21T13:45:44.200 に答える
3
   $array[0] = 1;
   $array[2] = 2;
   $arrayTxt = implode( ',', $array);
   $sql = "SELECT * FROM table WHERE some_id in ($arrayTxt)"
于 2014-04-08T15:50:29.530 に答える