Dies ist eine Zusammenfassung dessen, was ich versuche zu tun:
$array[0] = 1;
$array[1] = 2;
$sql = "SELECT * FROM table WHERE some_id = $array"
Natürlich gibt es einige Syntaxprobleme, aber das ist, was ich tun möchte, und ich habe noch nichts gefunden, das zeigt, wie es geht.
Derzeit ist mein Plan, etwas in diese Richtung zu tun:
foreach($idList as $is)
$where .= 'some_id=' . $id . ' OR';
endforeach
$sql = "SELECT * FROM table WHERE " . $where;
Gibt es in PostgreSQL Unterstützung für die Verwendung eines Arrays zur Suche, oder muss ich etwas Ähnliches wie meine Lösung tun?
postgresql
Jimmy Pitts
quelle
quelle
select id from users where id in (2, 1)
undselect id from users where id in (1, 2)
immer in der gleichen Reihenfolge zurücksenden :1, 2
. Wie kehre ich2, 1
bei der ersten Abfrage zurück?Für dynamisches SQL verwenden Sie:
'IN(' ||array_to_string(some_array, ',')||')'
Beispiel
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; $$;
Ergebnis:
NOTICE: {1,2} NOTICE: SELECT * FROM my_table WHERE my_column IN(1,2)
quelle
$array[0] = 1; $array[2] = 2; $arrayTxt = implode( ',', $array); $sql = "SELECT * FROM table WHERE some_id in ($arrayTxt)"
quelle
In meinem Fall musste ich mit einer Spalte arbeiten, die die Daten enthält, sodass die Verwendung von IN () nicht funktionierte. Vielen Dank an @Quassnoi für seine Beispiele. Hier ist meine Lösung:
SELECT column(s) FROM table WHERE expr|column = ANY(STRING_TO_ARRAY(column,',')::INT[])
Ich habe fast 6 Stunden verbracht, bevor ich über die Post gestolpert bin.
quelle