Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 02/01/2011, 23h20   #1
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Par défaut jointure avec sous jointure optimisé

Bonsoir je dois réaliser un petit travail et je m'interroge sur l'optimisation de ma requête sachant qu'une méthode plus propre doit mieux convenir.
J'ai des informations dans 4 tables :
La première contient les langues, la seconde contient les catégories, la 3eme les pages et la 4 eme fait la relation entre les pages et les catégories.
Les catégories contiennent un identifiant de langue pour la relation avec la table des langues.
Les pages contiennent également un identifiant de langue pour la relation avec la table des langues.
La table des relations ne contient pas les information de langue (pas besoin).
Pour l'instant je fais une requête externe pour récupérer les langues et retourner les informations.
Je souhaite les trier par langue et par identifiant :
Code :
1
2
3
4
5
6
SELECT r.idcms,r.idcategory,r.idpage,r.online_page,r.menu_page,c.category,p.titlepage,l.alias_lang,l.idlang
FROM dc_cms_rel_page AS r
JOIN dc_cms_category AS c ON(r.idcategory = c.idcategory)
JOIN dc_cms_page AS p ON(r.idpage = p.idpage)
LEFT OUTER JOIN dc_language l ON(p.idlang=l.idlang)
ORDER BY l.idlang ASC,r.idcms DESC
La suite est totalement faux mais c'est juste pour expliquer ce que je cherche à faire.
J'ai pensé faire autrement pour bien faire la liaison entre les langues dans le style :
Code :
1
2
3
4
5
6
 
SELECT r.idcms,r.idcategory,r.idpage,r.online_page,r.menu_page,c.category,p.titlepage,l.alias_lang,l.idlang
FROM dc_cms_rel_page AS r
JOIN dc_cms_category (SELECT * FROM dc_language) AS c ON(r.idcategory = c.idcategory)
JOIN dc_cms_page (SELECT * FROM dc_language) AS p ON(r.idpage = p.idpage)
ORDER BY l.idlang ASC,r.idcms DESC
Ou pourquoi pas un style:
Code :
1
2
3
4
5
6
 
SELECT r.idcms,r.idcategory,r.idpage,r.online_page,r.menu_page,c.category,p.titlepage,l.alias_lang,l.idlang
FROM dc_cms_rel_page AS r
JOIN testlang (SELECT * FROM dc_cms_category AS test JOIN dc_language AS testlang USING(idlang)) 
JOIN dc_cms_page (SELECT * FROM dc_language) AS p ON(r.idpage = p.idpage)
ORDER BY l.idlang ASC,r.idcms DESC
Mais je préfèrerais créer des tables virtuelles et récupérer le résultat que je peux manipuler dans une requête plus simple, bref je suis ouvert à tout
Ma question :
Est-ce que ma requête externe est optimisée et sinon comment l'optimiser pour être certain d'avoir les bonnes informations tout en restant rapide.
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 23h42   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Sans la description sous forme DDL de vos tables on ne peut vous aider. EN effet quels sont les clefs primaires et étrangères ?

Commencez donc par respecter la charte de postage : http://www.developpez.net/forums/a69...gage-sql-lire/

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 19h00   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Comme la table des langues est associée à la fois aux pages et aux catégories, je pense qu'il te faut deux instances de la table des langues.

Mais avec une explication claire de ton besoin, un petit jeu de données et le résultat attendu en plus de la description des tables demandée par SQLPro, ce sera plus facile de t'aider.
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web