Bonjour,
Prenons un exemple bateau pour illustrer. J'ai 2 tables comme suit:
table Client
- id (clé primaire)
- nom
- prénom
- adresse
- téléphone
table Commande
- id (clé primaire)
- id_client (clé étrangère, je vous laisse deviner sur quoi!)
Avec l'association un client a 0 à n commande, et une commande n'est associée qu'à un seul client.
La question est: quelle est la meilleure façon de récupérer, par exemple tous les clients dont le nom commence par 'a' (histoire de dire seulement certains clients), et la liste de leurs commandes. Attention, le résultat doit inclure les clients qui n'ont pas passé de commande. Donc exit un simple "select * from client, commande where client.id = commande.id_client and nom like 'a%'".
En l'état de mes connaissances en SQL, je vois 2 solutions:
- une fonction PGSql qui retourne la liste des clients qui vont bien, et une fonction PGSql qui retourne, pour un id de client, la liste des ids de commande. Le gros problème étant que ça va exécuter plein de petits select sur la DB. pas glop.
- une fonction PGSql qui retourne la liste des clients qui vont bien, et une fonction PGSql qui retourne la liste des commandes pour tous ces clients avec une requête du style "select commande.* from client, commande where client.id = commande.id_client and nom like 'a%'. Inconvénient: on interroge 2x la table client pour en récupérer les mêmes enregistrements... c'est pas super optimisé.
Je pense ne pas me tromper en disant que ces 2 solutions ne sont vraiment pas terribles, et donc je patoge un peu!
Any idea?![]()
Partager