Comment simplifier une double requête par jointure?
21 messages
• Page 1 sur 2 • 1, 2
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Comment simplifier une double requête par jointure?
Bonjour,
Je cherche à simplifier une double requête par une jointure (si c'est possible) car il me semble que c'est plus rapide et je dois avoué avoir quelques difficultés
Le champ "categorie_de_la_page" de la table "PAGE_DU_SITE" correspond au champ "id" de la table "SOUS_CATEGORIE" qui sont tout 2 des chiffres entier.
Ainsi : "categorie_de_la_page" est égal à "id" -> me ressort le bon nom de la catégorie correspondant à l'article.
Si vous avez quelques suggestions ...
Merci
Je cherche à simplifier une double requête par une jointure (si c'est possible) car il me semble que c'est plus rapide et je dois avoué avoir quelques difficultés
- Code: Tout sélectionner
<?php
//on sélectionne les articles
$article = mysql_query("SELECT id, categorie_de_la_page FROM PAGE_DU_SITE ORDER BY id DESC ");
while($affiche = mysql_fetch_array($article))
{
echo ''.$affiche["id"].''.$affiche["titre_de_la_page"].'<br/>';
//on sélectionne les catégories correspondantes
$cat = mysql_query('SELECT id, nom_sous_categorie FROM SOUS_CATEGORIE WHERE id='.$affiche['categorie_de_la_page'].'');
while($affiche1 = mysql_fetch_array($cat))
{
echo ''.$affiche1["id"].'-'.$affiche1["nom_sous_categorie"]).'';
}
//on ferme la 1ere boucle while
}
?>
Le champ "categorie_de_la_page" de la table "PAGE_DU_SITE" correspond au champ "id" de la table "SOUS_CATEGORIE" qui sont tout 2 des chiffres entier.
Ainsi : "categorie_de_la_page" est égal à "id" -> me ressort le bon nom de la catégorie correspondant à l'article.
Si vous avez quelques suggestions ...
Merci
-

dorian53 - WRInaute passionné

- Messages: 2215
- Inscription: 10 Avr 2005
Re: Comment simplifier une double requête par jointure?
Salut,
C'est tout simple, tu lies les deux id ensemble.
http://dev.mysql.com/doc/refman/5.0/fr/join.html
Exemple
Le ON correspond à tes deux 2 id.
C'est tout simple, tu lies les deux id ensemble.
http://dev.mysql.com/doc/refman/5.0/fr/join.html
Exemple
- Code: Tout sélectionner
mysql> SELECT table1.*, table2.* FROM table1
-> INNER JOIN table2 ON table1.id=table2.id
-> WHERE table2.id IS NULL;
Le ON correspond à tes deux 2 id.
- Matthieu_s
- WRInaute discret

- Messages: 87
- Inscription: 3 Aoû 2006
Re: Comment simplifier une double requête par jointure?
INNER JOIN te retourne uniquement les champs ou tu as une correspondance dans les 2 tables
Par exemple
Tu n'obtiendras que les lignes ou valeur est égale dans Table1 et Table2
Alors que
La tu vas obtenir toutes les lignes de la table1, et les lignes de la table2 ou le champ valeur est égal à celui de table1. Dans le cas ou il n'est pas égale, les champs de table2 prendront la valeur nulle dans les résultats de la requête.
Par exemple
- Code: Tout sélectionner
SELECT * FROM Table1 INNER JOIN Table2 ON Table1.valeur=Table2.valeur
Tu n'obtiendras que les lignes ou valeur est égale dans Table1 et Table2
Alors que
- Code: Tout sélectionner
SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.valeur=Table2.valeur
La tu vas obtenir toutes les lignes de la table1, et les lignes de la table2 ou le champ valeur est égal à celui de table1. Dans le cas ou il n'est pas égale, les champs de table2 prendront la valeur nulle dans les résultats de la requête.
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Re: Comment simplifier une double requête par jointure?
Re moi ^^,
Je suis presque parvenu à mes fins après mainte tentative mais un problème réside ...
Suite à ma requête, je construis 2 liens. L'un menant vers un article et l'autre vers la catégorie de l'article. Le "hic", c'est que tout deux utilisent un "id" et comme je ne suis pas habitué à ce style de requête .. bhin je suis largué
.
Bref, dans la requête qui suis c'est l'id de la catégorie qui est pris en compte dans les 2 liens $affiche2["id"] et je ne sais pas comment y remédier ...
Une suggestion ?
Merci
Je suis presque parvenu à mes fins après mainte tentative mais un problème réside ...
Suite à ma requête, je construis 2 liens. L'un menant vers un article et l'autre vers la catégorie de l'article. Le "hic", c'est que tout deux utilisent un "id" et comme je ne suis pas habitué à ce style de requête .. bhin je suis largué
Bref, dans la requête qui suis c'est l'id de la catégorie qui est pris en compte dans les 2 liens $affiche2["id"] et je ne sais pas comment y remédier ...
- Code: Tout sélectionner
$teste2 = mysql_query("SELECT * FROM PAGE_DU_SITE INNER JOIN SOUS_CATEGORIE ON PAGE_DU_SITE.categorie_de_la_page=SOUS_CATEGORIE.id ORDER BY PAGE_DU_SITE.id DESC LIMIT 0,5");
while($affiche2 = mysql_fetch_array($teste2))
{
//Lien vers l'article
echo '<a title="'.$affiche2["titre_de_la_page"].'" href="'.OptimiseUrl($affiche2["titre_de_la_page"]).'-'.$affiche2["id"].'.php">'.$affiche2["titre_de_la_page"].'</a>';
//lien vers la catégorie
echo '<a title="'.$affiche2["nom_sous_categorie"].'" href="sous-categorie-'.$affiche2["id"].'-'.OptimiseUrl($affiche2["nom_sous_categorie"]).'.php">'.$affiche2["nom_sous_categorie"].'</a>';
}
Une suggestion ?
Merci
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: Comment simplifier une double requête par jointure?
SELECT * c'est le mal. Et pour ta problématique, les alias sont tes amis (perso c'est pour ça que je n'appelles pas mes clés primaires avec le même nom, mais que je les préfixe avec le nom de la table) :
Une fois avoir fait ça, tu peux utiliser id_page et id_sous_categorie
- Code: Tout sélectionner
SELECT PAGE_DU_SITE.titre_de_la_page, PAGE_DU_SITE.id as id_page, SOUS_CATEGORIE.nom_sous_categorie, SOUS_CATEGORIE.id as id_sous_categorie FROM PAGE_DU_SITE INNER JOIN SOUS_CATEGORIE ON PAGE_DU_SITE.categorie_de_la_page=SOUS_CATEGORIE.id ORDER BY PAGE_DU_SITE.id DESC LIMIT 0,5
Une fois avoir fait ça, tu peux utiliser id_page et id_sous_categorie
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Re: Comment simplifier une double requête par jointure?
Oki, merci UsagiYojimbo
, je vais essayer ça.
Donc, quand on fait une jointure et que si sur celle ci 2 champs portent le même nom, il faut systématiquement utiliser les alias...c'est méga chiant comme requête
!
Par apport à ma double requête en haut de poste, j'y gagne vraiment quelque part ou ça fait juste plus fun ?
Donc, quand on fait une jointure et que si sur celle ci 2 champs portent le même nom, il faut systématiquement utiliser les alias...c'est méga chiant comme requête
Par apport à ma double requête en haut de poste, j'y gagne vraiment quelque part ou ça fait juste plus fun ?
-

dorian53 - WRInaute passionné

- Messages: 2215
- Inscription: 10 Avr 2005
Re: Comment simplifier une double requête par jointure?
tryan a écrit:Par apport à ma double requête en haut de poste, j'y gagne vraiment quelque part ou ça fait juste plus fun ?
Tu y gagnes et c'est une utilisation ordinaire, ne pas faire la jointure et gérer ça manuellement est contre nature.
Si tu avais 100 catégories, tu aurais fait 101 requêtes (sans oublier le traitement PHP annexe : while, $var, ...).
Là, une seule optimisée par la base de données.
- Matthieu_s
- WRInaute discret

- Messages: 87
- Inscription: 3 Aoû 2006
Re: Comment simplifier une double requête par jointure?
Oui, si tu as une condition de jointure (champ égal dans les 4 tables), tu peux joindre 4 tables sans problème. C'est valable pour n tables si ta condition de jointure est valable sur n table.
21 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Comment simplifier une double requête SQL?
- Simplifier une requête SQL
- Simplifier une requête MySQL
- Problème de jointure entre deux tables requête SQL
- (Résolu par une jointure)[MYSQL] Dissocier ma requête ?
- Requête à double conditions
- Optimiser une double requete
- Comment simplifier cette partie de htaccess ?
- Requete de recherche du simple ou double dans GWT
- Requete SQL : double tri un peu complexe
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
