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 19/07/2011, 16h47   #1
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 87
Points : 17
Points : 17
Par défaut Ma requete est elle optimisée ?

Bonjour,
J'ai eu quelques cours de sql au lycée mais on ne m'a jamais vraiment parlé des jointures type "left join" ou "right join".

Pourriez vous me dire si il y a plus optimisé que ce que j'ai fais (qui fonctionne).

Voici une image de ma BBD :

Et voici ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 SELECT*
        FROM enseigne JOIN formule 
        ON formule_idformule = idformule 
        JOIN enseigne_has_activite
        ON enseigne_idenseigne = idenseigne
        AND principale = "Y"
        JOIN activite
        ON enseigne_has_activite.activite_idactivite = idactivite
        JOIN secteur
        ON secteur_idsecteur = idsecteur
        WHERE idenseigne=\''.$id.'\' 
        AND statut_idstatut NOT IN(3,6)
Sachant qu'il y a beaucoup plus de champs que ce que j'affiche là....

Merci d'avance !!
sadkat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 17h02   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
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 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
À première vue, ce n'est pas trop mal mais :
1) Inutile de mettre les valeurs numériques entre apostrophes.

2) Les valeurs textuelles s'écrivent entre apostrophes et non entre guillemets.

3) Évitez la guerre des étoiles !
Notamment, rien que sur le morceau de schéma que vous donnez, vous aurez deux fois la colonne "libelle" provenant des tables "secteur" et "activite".

4) Mettez des alias pour les tables et utilisez ces alias pour toutes les colonnes utilisées dans la requête.
Ça rend la requête plus facile à lire.

5) Comme vos jointures sont toutes des jointures internes, il est d'usage de séparer les conditions de jointure et les conditions de restriction.
La restriction sur principale devrait donc être dans le WHERE.

Ça donnerait donc ça :
Code :
1
2
3
4
5
6
7
8
9
SELECT les_colonnes_necessaires_et_pas_etoile
FROM enseigne e
INNER JOIN formule f ON e.formule_idformule = f.idformule 
INNER JOIN enseigne_has_activite ea ON ea.enseigne_idenseigne = e.idenseigne
INNER JOIN activite a ON ea.activite_idactivite = a.idactivite
INNER JOIN secteur s ON e.secteur_idsecteur = s.idsecteur
WHERE idenseigne = $id
    AND statut_idstatut NOT IN(3,6) -- manque l'alias de table
    AND ea.principale = 'Y'
Une dernière chose : Les champs sont à la campagne, dans les blocs opératoires, dans les formulaires mais pas dans les tables SQL qui ne sont composées que de lignes et de colonnes !
__________________
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 19/07/2011, 17h12   #3
Futur Membre du Club
 
Inscription : décembre 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 87
Points : 17
Points : 17
Ok ! Merci beaucoup pour tous ces conseils.

En fait j'ai mis une * pour vous éviter l'énumération de ch... heuu de colonne. Donc j'ai bien réglé le problème des multi-libellés avec des alias.

En tout cas je prends note de tes remarques pour les guillemets.

Encore merci !
sadkat est dé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 04h27.


 
 
 
 
Partenaires

Hébergement Web