Problème :
Récupérer les données de la table des éléments, en conservant l'ordre d'éléments dans le champ de type de tableau dans la table some_chosen_data_in_order pour un rangée.
Tentative n° 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 = ?
Tentative n°2 : Sous-requête
SELECT I.* FROM items AS I WHERE I.id = ANY (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
Aucune de ces approches ne préserve l'ordre des éléments dans le array.
Solution :
SELECT t.* FROM unnest(ARRAY[1,2,3,2,3,5]) item_id LEFT JOIN items t on t.id=item_id
Cette requête désimbrique le tableau en lignes individuelles, en préservant l'ordre des éléments. Il joint ensuite les éléments résultants à la table des éléments en fonction du champ id.
Exemple :
ID | items_data |
---|---|
1 | {2,4,233,5} |
La requête ci-dessus renverra le résultat suivant :
id | data |
---|---|
2 | foo |
4 | bar |
233 | baz |
5 | qux |
Explication :
La fonction unnest décompresse le tableau dans un tableau avec une ligne par élément. Le LEFT JOIN garantit que tous les éléments du tableau sont renvoyés, y compris ceux qui n'ont pas de lignes correspondantes dans la table des éléments.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!