Sarc Posté 9 Septembre 2007 Posté 9 Septembre 2007 Bonjour... SELECT a.idmaison, a.ville, a.dadebut, a.quartier AS quartmem, a.type, b.idrue, b.idmais AS numero, b.coord, e.nom AS nom_ville, b.taille, d.nom AS nomrue, c.nom AS nomquart FROM maison a, ville_maisons b, ville_pays e LEFT OUTER JOIN infos_quartiers c ON c.id=b.idquart LEFT OUTER JOIN nom_rue d ON d.idrue=b.idrue AND d.idquart=b.idquart WHERE b.id=a.idmaison AND a.dafin='0000-00-00' AND a.idm='1' AND e.id=a.ville Voilà une petite requête SQL. En local, elle marche bien (du moins elle me renvoie 0 résultat mais sans m'énerver), alors qu'en ligne, avec la même base de donnée (du moins en structure), elle me renvoie ce message d'erreur : MySQL a répondu:Documentation#1054 - Unknown column 'b.idquart' in 'on clause' J'avoue que je suis un peu perdu. La colonne idquart existe sans aucun souci dans la table ville_maisons. M'ci d'avance de m'aiguiller.
marcb Posté 9 Septembre 2007 Posté 9 Septembre 2007 Bonsoir, 1) Quelles sont les versions de mySQL (en local et sur le serveur distant) ? 2) Peux-tu fournir une extraction sql (uniquement de la structure) de tes tables, pour qu'on puisse tester ta requête ? M
KaRaK Posté 9 Septembre 2007 Posté 9 Septembre 2007 Bonsoir, Est ce que les versions de tes bases de données sont identiques ? Par exemple, un vieux mysql chez ton hébergeur.
Sarc Posté 9 Septembre 2007 Auteur Posté 9 Septembre 2007 Salut à vous ! On m'a donné la solution entre temps... Il faut mettre les tables dans le bon ordre, donc que celle qui est en relation soit la dernière citée avant le LEFT JOIN : FROM maison a, ville_pays e, ville_maisons b LEFT OUTER JOIN infos_quartiers c ON d.idrue=b.idrue A la place de : FROM maison a, ville_maisons b, ville_pays e LEFT OUTER JOIN infos_quartiers c ON d.idrue=b.idrue A cause de la relation avec la table b... Ca marchait avant en local jusqu'à MySQL 4, mais ça ne marche plus sur MySQL 5... Merci à vous en tout cas, et j'espère que ça pourra servir à d'autres ! En tout cas, j'ai appris quelque chose
Portekoi Posté 10 Septembre 2007 Posté 10 Septembre 2007 Salut, SImple conseil : Essaie d'écrire tes requêtes un peu plus lisiblement et en utilisant des INNER JOIN, par exemple : SELECT a.idmaison, a.ville, a.dadebut, a.quartier AS quartmem, a.type, b.idrue, b.idmais AS numero, b.coord, e.nom AS nom_ville, b.taille, d.nom AS nomrue, c.nom AS nomquart FROM maison a inner join ville_maisons bON a.idmaison=b.idinner join ville_pays e ON e.id=a.villeLEFT OUTER JOIN infos_quartiers c ON c.id=b.idquart LEFT OUTER JOIN nom_rue d ON d.idrue=b.idrue AND d.idquart=b.idquart WHERE AND a.dafin='0000-00-00' AND a.idm='1' C'est plus chiant à écrire mais dans le code, on voit beaucoup mieux les relations ++
petit-ourson Posté 10 Septembre 2007 Posté 10 Septembre 2007 Ce n'est pas un problème de majuscule/minuscule. Et je suis du même avis que Portekoi, l'utilisation du INNER JOIN est souvent plus clair (et plus propre je trouve).
Portekoi Posté 11 Septembre 2007 Posté 11 Septembre 2007 C'est surtout que la "restriction" se fait sur la jointure, et non sur le Where. Je veux dire que si tu fais une "jointure externe" par le where, tu vas prendres tous les résultats des 2 tables et ensuite seulement, SQL va appliquer le where. Alors que si tu fais ta jointure sur le INNER JOIN, tu vas "restreindre" directement les résultats Donc en terme de performance, y a pas photo. Et ne jamais oublier clé et index
Portekoi Posté 11 Septembre 2007 Posté 11 Septembre 2007 Lien intéressant : http://sqlpro.developpez.com/cours/sqlaz/jointures/#L1.2
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant