Problem:
Daten aus der Artikeltabelle abrufen und dabei die Reihenfolge beibehalten der Elemente im Feld „Array-Typ“ in der Tabelle „some_chosen_data_in_order“ für einen bestimmten Zeile.
Versuch #1: JOIN
SELECT I.* FROM items AS I JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items) WHERE S.id = ?
Versuch #2:Unterabfrage
SELECT I.* FROM items AS I WHERE I.id = ANY (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
Keiner dieser Ansätze bewahrt die Reihenfolge der Elemente im Array.
Lösung:
SELECT t.* FROM unnest(ARRAY[1,2,3,2,3,5]) item_id LEFT JOIN items t on t.id=item_id
Diese Abfrage entschachtelt das Array in einzelne Zeilen und behält dabei die Elementreihenfolge bei. Anschließend verknüpft es die resultierenden Elemente mit der Elementtabelle basierend auf dem ID-Feld.
Beispiel:
ID | items_data |
---|---|
1 | {2,4,233,5} |
Die obige Abfrage gibt das folgende Ergebnis zurück:
id | data |
---|---|
2 | foo |
4 | bar |
233 | baz |
5 | qux |
Erklärung:
Die Unnest-Funktion wird entpackt das Array in eine Tabelle mit einer Zeile pro Element. Der LEFT JOIN stellt sicher, dass alle Elemente aus dem Array zurückgegeben werden, einschließlich derjenigen, die keine entsprechenden Zeilen in der Elementtabelle haben.
Das obige ist der detaillierte Inhalt vonWie kann die Reihenfolge der Array-Elemente beim Verknüpfen von PostgreSQL-Tabellen mit Array-Feldern beibehalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!