Postgresql Sélectionner les lignes où column = array

Ceci est un résumé de ce que j’essaie de faire:

$array[0] = 1; $array[1] = 2; $sql = "SELECT * FROM table WHERE some_id = $array" 

Évidemment, il y a des problèmes de syntaxe, mais c’est ce que je veux faire, et je n’ai encore rien trouvé qui montre comment le faire.

Actuellement, mon plan est de faire quelque chose en ce sens:

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

Existe-t-il un support dans PostgreSQL pour utiliser un tableau à rechercher ou dois-je faire quelque chose de similaire à ma solution?

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

ou compatible ANSI :

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

La syntaxe ANY est préférable car le tableau dans son ensemble peut être passé dans une variable liée:

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

Vous devez passer une représentation sous forme de chaîne du tableau: {1,2}

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

Pour une utilisation SQL dynamic:

'IN(' ||array_to_ssortingng(some_array, ',')||')'

Exemple

 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_ssortingng(some_array, ',')||')'; RAISE NOTICE '%', sql_statement; END; $$; 

Résultat: NOTICE: {1,2} NOTICE: SELECT * FROM my_table WHERE my_column IN(1,2)