Petite différence entre MySQL 4 et 5...

Imaginez la requête suivante, qui retourne le montant des commandes de clients:

SELECT client.*, pays.*, SUM(commande.montant)
FROM client, pays
LEFT JOIN commande ON commande.id_client=client.id_client
WHERE client.id_pays=pays.id_pays
GROUP BY client.id_client

Avec MySQL 4, elle passe sans problème. Avec MySQL 5, vous aurez une erreur du genre "client.id_client n'existe pas"... Alors que si, il existe! Alors, si vous échangez les tables client et pays dans le FROM (FROM pays, client), ca marchera. En gros, il faut que la table sur laquelle on fait le LEFT JOIN, soit en dernier dans le FROM. Vous me direz, ok alors pourquoi ce post?! Ben imaginez plusieurs LEFT JOIN dans la requête, vous faites comment pour mettre toutes les tables concernées en dernier dans le FROM?? loool

La solution consiste tout simplement à mettre les tables du FROM entre parenthèses. On aura alors la requête:

SELECT client.*, pays.*, SUM(commande.montant)
FROM (client, pays)
LEFT JOIN commande ON commande.id_client=client.id_client
WHERE client.id_pays=pays.id_pays
GROUP BY client.id_client

Et ça passera sans soucis, avec tous les LEFT JOIN que vous souhaitez ! ;o)