Problème requête MySQL

Masterjm -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,

J'ai un problème avec une requête SQL. Elle fonctionne parfaitement en local avec un MySQL 4.1.9, par contre pas du tout en MySQL 3.23. Voici la requête et le message d'erreur :

SELECT m.id_membre, nom_membre, prenom_membre, id_droit
FROM membres m
INNER JOIN droits_membres d ON m.id_membre = d.id_membre
WHERE id_droit =3
AND (

SELECT COUNT( * )
FROM membres mm
INNER JOIN droits_membres dd ON mm.id_membre = dd.id_membre
WHERE id_droit <>1
AND dd.id_membre = d.id_membre
) =1
ORDER BY nom_membre

MySQL a répondu :
#1064 - Something is wrong in your syntax près de 'SELECT COUNT( * ) FROM membres mm INNER JOIN droits_membres dd' à la ligne 1

Quelqu'un comprend pourquoi cette erreur ?

Je vous remercie pour votre aide !

1 réponse

Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,
SELECT COUNT( * )
FROM membres
INNER JOIN droits_membres ON membres.id_membre = droits_membres.id_membre
WHERE membres.id_droit <>1
ORDER BY membres.nom_membre

'dd.id_membre = d.id_membre' ne pouvait fonctionner et il est inutile puisque c'est ta jointure.

pour le reste je préfère citer les champs nommément plutôt que d'utiliser un alias d'autant que ta requête est très courte.

si tu veux juste obtenir le nombre et le tri effectue la requête sur 'membres.nom_membre' plutôt que sur l'ensemble.

moi j'ai l'habitude de coder les champs et tables ainsi 'champ'.
0
Masterjm
 
'dd.id_membre = d.id_membre' ne pouvait fonctionner et il est inutile puisque c'est ta jointure.

Sur MySQL 4.1.9, il fonctionne étant donné que d.id_membre ne fait pas référence au même enregistrement que dd.id_membre (d.id_membre étant celui de la jointure de la requête mère, dd étant l'alias de la sous requête).
J'ai essayé en mettant ta solution, malheureusement je reçois toujours le même message d'erreur qu'auparavant. Je pense qu'il y a un problème avec la sous-requête, il l'accepte pas. Je peux contourner en allant chercher la valeur du count avant en la stockant dans une variable PHP, mais j'aurais aimé avoir une solution plus "propre". Merci pour ton aide !!
0
Reivax962 Messages postés 3742 Statut Membre 1 011
 
Il me semble bien que les requêtes imbriquées n'ont été implémentées dans mysql qu'à partir de la version 4 voire 4.1 ...
En version 3.x, elles n'existaient pas.

Donc, j'en suis désolé, mais tu devras utiliser ta version "pas propre" pour être compatible avec mysql 3.x

Xavier
0