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.