Quelques remarques sur votre requête...
1) A quoi sert la condition suivante ?
AND (mexp.id IS NULL OR mexp.id IS NOT NULL)
Elle sera toujours vraie ! ![8O](https://www.developpez.net/forums/images/smilies/icon_eek.gif)
2) La syntaxe normalisée du GROUP BY voudrait que toutes les colonnes du SELECT ne faisant l'objet d'une fonction de regroupement figurent dans la clause GROUP BY.
m.reference et m.datrequete sont fonctionnellement dépendants de m.id donc ces colonnes devraient donner la bonne valeur et MySQL accepte que ces colonnes soient ommises.
Par contre, mr.idsociete et mexp.id faisant partie d'autres tables, la valeur donnée par la requête sera probablement aléatoire.
3) En SQL, la différence ne s'écrit pas != comme en PHP mais <>.
4) D'après la condition de jointure entre clients et mission_requerant, mr.idsociete est en fait l'identifiant du client.
Vous voulez concaténer la liste des clients mais pas les identifiants donc ce que je disais plus haut est sans doute vrai : l'identifiant du client sera pris au hasard parmi la liste concaténée des c.societe.
Si je comprends bien le sens de votre requête, vous souhaitez afficher la liste des clients de chaque mission, ainsi que l'identifiant de l'expertise ?
Il semble qu'il n'y ait au plus qu'une expertise par mission ? Alors mexp.id devrait pouvoir être omis sans dommage dans la clause GROUP BY.
1 2 3 4 5 6 7 8 9 10
| SELECT m.reference, m.datrequete,
GROUP_CONCAT(c.id, c.societe ORDER BY c.societe SEPARATOR ' ') AS societes,
mexp.id
FROM mission m
INNER JOIN mission_requerant AS mr ON mr.reference = m.reference
INNER JOIN clients AS c ON c.id = mr.idsociete
LEFT JOIN mission_expertise AS mexp ON mexp.reference = m.reference
WHERE m.expert = 'EXPERT'
AND m.etat <> 'off'
GROUP BY m.id, m.reference, m.datrequete |
Partager