PostgreSQL
La base de donn�es la plus sophistiqu�e au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Utilisation de vues

Technique - général | Utilisation de vues

Par jduv le 19/09/2006 - 16:30

Bonjour à tous,
J'ai un script php qui me crée une dizaine de vues qui on toutes le même nom de champs (2) et d'enregistrements.
L'un des champs (type date) contient exactement les mêmes enregistrements dans chacune des vues.
J'aimerai savoir s'il est possible de faire une requete pour récuperer une seule fois le champ clé et autant de fois l'autre champ.

date | val1_vue1 | val1_vue2 | val1_vue3 | val1_vue4 etc..

Pour le moment je peut faire qlq chose du type :

select view1.date_j,view1.val,view2.val,view3.val
from view1,view2,view3
where
view1.date_j=view2.date_j
AND
view2.date_j=view3.date_j

qui me permet d'obtenir ce que je souhaite mais j'ai l'impression qu'au niveau de la syntaxe, il y a mieux à faire:

J'avais tout d'abord fait cela en php avec des tableaux mais la durée d'execution du script laisse à désirer

Merci d'avance

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour, Si j'ai bien tout

Jean-Paul Argudo/ = 20 Septembre, 2006 - 09:23

Bonjour,

Si j'ai bien tout compris à votre problème, l'astuce consiste à utiliser une requête en UNION sur l'ensemble de vos vues. Je prends par principe que la date est unique dans chacune des vues (si ce n'est pas le cas, la requete ci-dessous va faire des sommes des valeurs...)

Soit 3 vues que vous voulez joindre dans une seule et même requête, en ligne (l'exemple est adaptable à n vues):

select madate, sum(v1), sum(v2), sum(v3)
from
(
select date madate, valeur V1, 0 v2, 0 v3
from vue1
UNION
select date, 0, valeur, 0
from vue2
UNION
select date, 0, 0, valeur
from vue3) foo
group by madate;

L'alias des colonnes n'est utile que sur le 1er SELECT.

N'hésitez pas à revenir sur le forum si ce n'est pas exactement ce que vous vouliez.

Cordialement,

--
Jean-Paul ARGUDO
www.dalibo.com


Bonjour et merci pour votre r

jduv/ = 20 Septembre, 2006 - 11:16

Bonjour et merci pour votre réponse,

En fait, ce que je cherche à faire est un genre de concatenation des vues en une seule en ne conservant qu'une seule des colonnes date puisque ce sont toutes les mêmes qlq soit la vue.
La vue finale aurait donc le même nombre de lignes que les autres vues.

Je ne sais pas s'il est trés judicieux de vouloir faire cela en SQL mais c'est le genre de question que je me pose souvent. La manipulation du résultat de requêtes SQL doit elle se faire en php via des tableaux ou peut on imaginer le faire en sql sachant que le but final est d'enregistrer le résultat dans un fichier csv.

J'ai eut l'occasion de vérifier que le traitement par Postgresql est jusque là (d'aprés moi et moi seul) toujours plus rapide que le même fait en php, mais je n'ai pas beaucoup des cas différents pour l'affirmer.

Est il adéquat de créer des vues via un script php et de les supprimer ensuite ou faut il mieux stocker le résultat de chacune des requêtes SQL dans des tableaux php ?

Sachant que dans ce cas précis j'utilise des vues qui sont crées via une requête suffisemment complexe (au moins pour moi) à partir desquelles je refait une autre requête tout aussi complexe. et que je le même enchainement en une seule et même requete est peut être faisable mais devient assez indigeste au niveau comphéhension.


Donc tu fais une vue depuis 3

sparky/ = 20 Septembre, 2006 - 10:55

Donc tu fais une vue depuis 3 vues ? Il vaut mieux vérifier l'utilisation des index sur date_j

La syntaxe est correcte, tu pourrais aussi faire
select view1.date_j,view1.val,view2.val,view3.val
from view1 join view2 using (date_j) join view3 using (date_j)


Soyons clair, les vues sont l

sparky/ = 20 Septembre, 2006 - 16:46

Soyons clair, les vues sont là pour facilier le code, donc à ne pas utiliser à tort et à travers mais à utiliser à bon escient...


OK merci pour la réponse Fa

jduv/ = 20 Septembre, 2006 - 17:12

OK merci pour la réponse
Faut il conclure que d'utiliser des vues via du php n'est pas à bon escient ?
J'utilise les vues pour simplifier mon code SQL mais aussi qlq part celui de mon script php qui reutilise les vues crées (d'abord pour simplifier mes requêtes) pour ne pas avoir à les stocker dans des tableaux.


Ben si tu crées une vue pour

sparky/ = 21 Septembre, 2006 - 09:44

Ben si tu crées une vue pour éviter une commande complexe SQL qui revient souvent, c'est tout-à-fait correct. Que le code soit C, php, python ou plpgsql, cela ne change rien.

Mais attention n'oublie de "tuner" tes vues :-) Et essaie d'éviter de faire des vues de vues de vues


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.