03-09-2007, 08:03 AM
À noter puisque tu t'attaques aux jointures, il faut que tu regardes attentivement la différence entre jointure «interne» (INNER JOIN, par défaut) et jointure «externe» (OUTER JOIN).
La première va exclure les lignes qui ne peuvent être jointes, la deuxième va les inclure en mettant des valeurs NULL aux champs de la deuxième table.
C'est plus clair avec un exemple, on va reprendre celui de la traduction que j'ai donné récemment :
objets (id, nom, valeur)objets_i18n (id, langue, nom)
Si je fais une jointure interne, je perds ma fourchette :(objets.id, objets.nom, objets.valeur, objets_i18n.id, objets_i18n.langue, objets_i18n.nom)
Si je fais une jointure externe, je retrouve ma fourchette non traduite :(objets.id, objets.nom, objets.valeur, objets_i18n.id, objets_i18n.langue, objets_i18n.nom)
C'était juste au passage, parce que j'ai découvert ça il n'y a pas si longtemps au regard de mon temps d'utilisation de MySQL, et ça c'est comme certaines fonctions de PHP (glob(), call_user_func_array(), etc… : bien trop peu connu
La première va exclure les lignes qui ne peuvent être jointes, la deuxième va les inclure en mettant des valeurs NULL aux champs de la deuxième table.
C'est plus clair avec un exemple, on va reprendre celui de la traduction que j'ai donné récemment :
objets (id, nom, valeur)
Code :
1 couteau 10
2 fourchette 8
Code :
1 en knife
Si je fais une jointure interne, je perds ma fourchette :
Code :
SELECT * FROM objets LEFT JOIN objets_i18n ON (objets.id = objets_i18n.id AND objets_i18n.langue = 'en') WHERE id IN (1,2)
Code :
1 couteau 10 1 en knife
Si je fais une jointure externe, je retrouve ma fourchette non traduite :
Code :
SELECT * FROM objets LEFT OUTER JOIN objets_i18n ON (objets.id = objets_i18n.id AND objets_i18n.langue = 'en') WHERE id IN (1,2)
Code :
1 couteau 10 1 en knife
2 fourchette 8 NULL NULL NULL
C'était juste au passage, parce que j'ai découvert ça il n'y a pas si longtemps au regard de mon temps d'utilisation de MySQL, et ça c'est comme certaines fonctions de PHP (glob(), call_user_func_array(), etc… : bien trop peu connu
Ressources [PHP][MySQL][prototype.js]