Bonjour à tous,
Je reviens vers vous avec une nouvelle question. Tout d'abord, voilà une idée de la structure de ma base :
J'ai une table principale, A, qui contient dans chaque enregistrement :
Les id_b, id_c, id_d contiennent des id correspondant aux table B, C et D, mais ne sont pas déclarées comme clé étrangères car le nom des tables B, C et D peuvent changer (en gros, j'indique un id qui existe dans une autre table, et je récupère le nom de cette table autre part dans la bdd).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 id id_b id_c id_d
La sous-requête que je veux réutiliser plusieurs fois me fournis un ensemble d'id de la table A (environ 400 ou 500 id en général sur un total important, j'aurais a terme sûrement un million d'enregistrement dans cette table). Je dois ensuite faire plusieurs requêtes pour récupérer les infos correspondantes dans B, puis dans C, puis dans D (qui sont chacune liées à d'autres tables, donc je préfère faire les requêtes séparées pour limiter la taille des résultats).
Pour info, je communique avec ma base via pqxx depuis un programme en C++, j'ai donc toute latitude pour traiter un résultat et le reformater pour une requête suivante.
J'envisage plusieurs solutions, mais je n'ai aucune idée de leur efficacité respectives (et de la possibililté de les mettre en oeuvre).
La première consiste a récupérer le résultat de la requetes des A.id, puis de mettre la liste dans un A.id IN {id_1, id_2, ...} dans les clauses WHERE de mes requêtes suivante, mais j'ai peur que ce soit très peu efficace au niveau du traitement des requêtes suivantes.
Une autre solution serait de stocker temporairement la requête le temps de faire mes autres requêtes puis de la supprimer ensuite, cependant je ne sais pas si cela est possible avec postgre
La dernière solution serait de refaire la requête à chaque fois, mais j'aimerai bien éviter ça, sauf si postgre a un mécanisme de stockage interne du résultat des dernières requêtes...
Merci d'avance,
Babcool
Partager