Aller au contenu

Requête qui marche pas


Sarc

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 :shutup:

Lien vers le commentaire
Partager sur d’autres sites

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 b
ON
a.idmaison=b.id
inner join
ville_pays e
ON
e.id=a.ville
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
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 :)

++

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...