par
Hubert Roksor » 22 nov. 2006, 22:34
La gestion des jointures a quelque peu changé entre 4.1 et 5.0, les changements sont expliqué dans
le manuel de MySQL à "JOIN syntax". Il va probablement te falloir réordonner les tables (dans la requête uniquement, c'est d'un point de vue syntaxique uniquement) et/ou utiliser des parenthèses là où ça va bien. Si besoin est, tu peux remplacer les virgules par des "JOIN" ou "INNER JOIN", ils sont identiques.
Pour plus de clarté, tu devrais penser également à déclarer la table d'origine de chaque colonne, par exemple dans
...on ne sait pas d'où provient "noeud_rel_parent". Accessoirement, je recommande généralement de placer les conditions de jointure dans le ON quand on utilise JOIN à la place des virgules, ça permet de vérifier que toutes les jointures sont effectuées correctement. (dans ton exemple je ne sais pas comment est jointe la table "child")
En dernier, je recommande de conserver le noms des colonnes à travers les tables à chaque fois que cela est possible. Par exemple, "service_noeud_rel_service" devrait s'appeler "service_id" puisqu'il s'agit apparemment d'une clé étrangère pour service.service_id
PS: une astuce, si tu n'es pas sûr de l'interprétation d'une requête sous MySQL 5.0 essaie "EXPLAIN EXTENDED SELECT ...". Après exécution, la requête telle qu'elle a été interprétée peut être récupérée par
La gestion des jointures a quelque peu changé entre 4.1 et 5.0, les changements sont expliqué dans [url=http://dev.mysql.com/doc/refman/5.0/en/join.html]le manuel de MySQL à "JOIN syntax"[/url]. Il va probablement te falloir réordonner les tables (dans la requête uniquement, c'est d'un point de vue syntaxique uniquement) et/ou utiliser des parenthèses là où ça va bien. Si besoin est, tu peux remplacer les virgules par des "JOIN" ou "INNER JOIN", ils sont identiques.
Pour plus de clarté, tu devrais penser également à déclarer la table d'origine de chaque colonne, par exemple dans
[code]noeud_rel_parent=parent.noeud_id[/code]
...on ne sait pas d'où provient "noeud_rel_parent". Accessoirement, je recommande généralement de placer les conditions de jointure dans le ON quand on utilise JOIN à la place des virgules, ça permet de vérifier que toutes les jointures sont effectuées correctement. (dans ton exemple je ne sais pas comment est jointe la table "child")
En dernier, je recommande de conserver le noms des colonnes à travers les tables à chaque fois que cela est possible. Par exemple, "service_noeud_rel_service" devrait s'appeler "service_id" puisqu'il s'agit apparemment d'une clé étrangère pour service.service_id
PS: une astuce, si tu n'es pas sûr de l'interprétation d'une requête sous MySQL 5.0 essaie "EXPLAIN EXTENDED SELECT ...". Après exécution, la requête telle qu'elle a été interprétée peut être récupérée par
[code]SHOW WARNINGS[/code]