Aller au contenu

Requête qui marche pas


Sujets conseillés

Posté

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.

Posté

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

Posté

Bonsoir,

Est ce que les versions de tes bases de données sont identiques ?

Par exemple, un vieux mysql chez ton hébergeur.

Posté

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:

Posté

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

++

Posté

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

Posté

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

Veuillez vous connecter pour commenter

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



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