Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2011, 10h35   #1
Candidat au titre de Membre du Club
 
Étudiant
Inscription : décembre 2008
Messages : 42
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 42
Points : 13
Points : 13
Par défaut Comment pallier l'utilisation des vues en mysql

Bonjour,
Je viens vers vous car j'ai un problème. Je m'explique : je suis entrain de développer une petite application en php qui aura pour simple but d'afficher des données enregistrées.
Pour afficher certaines données, j'ai dû créer des "vues" (en local), mais lors du déploiement de l'application sur le serveur, je me rend compte que la version de MySQL présente sur le poste est une 4.1, l'utilisation des vues n'étant pas prise en compte sur cette version. L'idée serait, dans un premier temps, de trouver une solution pour pallier l'absence des vues dans MySQL 4.1. Et, s'il y a pas de solution, je verrai avec l'administrateur s'il peut mettre à jour MySQL.

Je vous montre la vue que j'ai crée :
le nom de la vue: yy_date_de_livraison_dune_demande
Code :
1
2
3
4
5
6
7
8
9
 
SELECT demande_ou_projet.IdDemande, 
demande_se_trouve_dans_etat.Date_entree
AS PremierDeDate_entree
FROM demande_ou_projet 
INNER JOIN demande_se_trouve_dans_etat 
ON demande_ou_projet.IdDemande = demande_se_trouve_dans_etat.IdDemande
WHERE (((demande_se_trouve_dans_etat.Code_etat)="LID"))
GROUP BY demande_ou_projet.IdDemande
Cette vue, je l'utilise dans une autre requête.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
SELECT demande_ou_projet.IdDemande, LEFT(LIBELLE_FORFAIT_BUDGET,20) 
AS Projet, demande_ou_projet.IdClientDemande, LEFT(Libelle,15) 
AS Intitule, demande_ou_projet.Date_livraison_prevue,
yy_date_de_livraison_dune_demande.PremierDeDate_entree 
AS Livraison_reelle, 
demande_ou_projet.Date_reception, demande_ou_projet.Type_demande, demande_ou_projet.niveau_de_severite
FROM sous_systeme 
INNER JOIN ((forfait_budget 
INNER JOIN demande_ou_projet 
ON forfait_budget.ID_FORFAIT_BUDGET = demande_ou_projet.REF_FORFAIT_BUDGET) 
LEFT JOIN yy_date_de_livraison_dune_demande
ON demande_ou_projet.IdDemande =yy_date_de_livraison_dune_demande.IdDemande) 
ON sous_systeme.IdSousSyst = forfait_budget.REF_SOUS_SYSTEME
GROUP BY demande_ou_projet.IdDemande, 
LEFT(LIBELLE_FORFAIT_BUDGET,20), demande_ou_projet.IdClientDemande, 
LEFT(Libelle,15), demande_ou_projet.Date_livraison_prevue, 
yy_date_de_livraison_dune_demande.PremierDeDate_entree, 
demande_ou_projet.Date_reception, demande_ou_projet.Type_demande, 
demande_ou_projet.niveau_de_severite, sous_systeme.IdAppli
HAVING (((LEFT(LIBELLE_FORFAIT_BUDGET,20))="S/M Europe" OR (LEFT(LIBELLE_FORFAIT_BUDGET,20))="S/M France") 
AND ((yy_date_de_livraison_dune_demande.PremierDeDate_entree) BETWEEN "03/04/2011"  AND "15/04/2011"  ) AND ((sous_systeme.IdAppli)="DEV"))
Avez vous un autre moyen de réécrire cette requête ?
J'ai pensé aux requêtes imbriquées, mais je ne vois pas trop comment l'utiliser dans mon cas.
Serait-il possible de stocker une requête dans une variable en php par exemple ?

Je reste à votre entière disposition pour toute question ou information supplémentaire.
Merci
kakashi05 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 11h46   #2
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 846
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 846
Points : 1 322
Points : 1 322
salut,

normalement tu peux remplacer la vue par la requête qui l'engendre sans problème, tu vas juste perdre en performance peut-être car parfois l'optimiseur peine... au pire tu crées une table temporaire que tu remplies avec la requête de la vue et l'utilises à la place de la vue...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 14h36   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 001
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 001
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Je crois que les requêtes imbriquées ne vont pas fonctionner dans son cas puisque le serveur est en version 4.1 (il serait effectivement temps de le mettre à jour !).
Je crains que les tables temporaires soient alors le seul palliatif.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 14h51   #4
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 846
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 846
Points : 1 322
Points : 1 322
oui c'est clair.... au moins pour avoir les procédures stockées et enfin un truc qui permette un peu plus de choses
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 17h58   #5
Candidat au titre de Membre du Club
 
Étudiant
Inscription : décembre 2008
Messages : 42
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2008
Messages : 42
Points : 13
Points : 13
Merci à vous deux (ericd69 et CinePhil) l'utilisation des tables temporaires m'a aidé à contourner le problème , je vais voir avec l'administrateur pour qu'il fasse une mise à jour, en tout cas j'ai appris quelque chose en plus

Bon, il ne reste plus qu'à mettre resolu
kakashi05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 09h21   #6
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Citation:
Envoyé par CinePhil Voir le message
Je crois que les requêtes imbriquées ne vont pas fonctionner dans son cas puisque le serveur est en version 4.1 (il serait effectivement temps de le mettre à jour !).
Je crains que les tables temporaires soient alors le seul palliatif.
Normalement, MySQL supporte les sous-requêtes imbriquées depuis la version 4.1.
Donc, dans le cas présent, ça doit être jouable, mais avec des performances qui se dégradent vite (ça va mieux seulement depuis la version 5.4).

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h07.


 
 
 
 
Partenaires

Hébergement Web