Oltana.net 23 Mai 2012 à 19:17:52 *
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.


Connexion avec identifiant et mot de passe
Nouvelles:
Pour les gens déja membres, veuillez supprimer le cookie du site présent sur vos navigateurs, sous peine de pb de connexion.

Si ca n'y fait toujours rien, se faire renvoyer un nouveau mot de passe, puis le changer un fois loggé.
 
 
Accueil Aide Rechercher
Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: [sql] Le LEFT JOIN - moyen d'économiser des ressources  (Lu 871 fois)
Patami
Administrateur
*****
Hors ligne Hors ligne

Messages: 599



Voir le profil WWW
« le: 19 Août 2005 à 16:09:42 »

Le LEFT JOIN est une commande SQL permettant d'optimiser fortement vos requêtes. Découvrons-le ensembles ...

Soit 2 tables :

articles




users




Nous désirons afficher un article en spécifiant le titre, le texte, ainsi que le nom et prénom de l'auteur. Pour faciliter la gestion, les données sur les auteurs, souvent réutilisées, sont stockées dans une 2e table. Dans le champ ref_auteur on a l'id de l'user.
Comment récupérer les informations de la 2e table et les mettre en relation avec la 1ère ? Souvent, les codeurs font une première requête qui sélectionne l'article. Ils ont ainsi sélectionné l'id de référence, et font alors une 2e requête sql où ils sélectionnent l'auteur selon son id dans la table users. S'ils doivent faire une liste, avec une boucle, ils mettent alors la seconde requête dans la boucle. ERREUR ! Multiplier de cette manière une requête sql est la pire des choses que l'on puisse faire à un serveur, c'est la meilleure chose à faire pour ralentir au maximum l'affichage de la page !

Comment remédier à cela ? Faire une sélection sql digne de ce nom : utiliser le "LEFT JOIN".

Sa syntaxe est simple, il est à placer avant les critères de sélection WHERE LIMIT et ORDER BY et après le FROM table, soit :

SELECT * FROM table1 LEFT JOIN table2 ON table1.champ_ref = table2.id WHERE table1.id = x

On constate que l'on met LEFT JOIN puis le nom de la seconde table. On met ensuite le critère d'ajout de la table. Il vous faut penser de cette manière : le left join consiste à ajouter les colonnes de la 2e table à la suite (donc à droite) de celles de la 1ère table. Pour savoir quel champ doit se placer où, on utilise ensuite le ON qui définit un critère de liaison des deux tables.
Dans notre exemple,  cela donnerait :

SELECT * FROM articles LEFT JOIN users ON articles.ref_auteur = users.id

Notre sélection sous forme de tableau donnerait :



Notez que l'on se retrouve alors avec deux champs du même nom (id). Si vous avez besoin de faire appel à un des deux champs, cela posera alors problème (vu que le serveur ne saura pas quelle colonne est la bonne). Il est donc conseillé de préciser dans la sélection tous les champs que vous désirez, en renommant ceux portant le même nom.

Dans notre exemple :

SELECT articles.id AS id_article,
articles.titre,
articles.texte,
articles.ref_auteur,
users.id AS user_id,
users.prenom,
users.nom
FROM articles
LEFT JOIN users
ON articles.ref_auteur = users.id


Attention : n'oubliez pas de bien sélectionner tous les champs que vous utilisez dans la requête ! Par exemple nous n'aurons pas besoin du champ ref_auteur plus tard, vu que l'on a le champ id de la table users, cependant on utilise ce champ dans notre requête, il faut donc bien le sélectionner !

Note : comme vous le voyez dans cet exemple, on utilise la commande AS pour renommer un champ Clin d'oeil
Si vous le désirez, vous pouvez utiliser ces champs renommés dans votre requête, dans notre exemple vous auriez pu mettre pour le critère de liaison : ON articles.ref_auteur = user_id


Voilà, notez que vous pouvez faire plusieurs LEFT JOIN dans une même requête, vous pouvez même refaire un LEFT JOIN avec la même table (mais il faudra alors la renommer ainsi : LEFT JOIN table2 AS table3 )
Journalisée

Votre site 100% configurable en un tour de main, c'est désormais possible avec KwsPHP
Pages: [1]   Haut de page
Imprimer
Oltana.net  |  Tutoriels  |  Grimoire  |  Fil de discussion: [sql] Le LEFT JOIN - moyen d'économiser des ressources
 
Aller à:  

Powered by SMF 1.1.15 | SMF © 2006-2009, Simple Machines