J'écris actuellement une requête en PHP grâce à Doctrine. Voici la requête :
<?php
$this->createQuery('s')
->leftJoin('s.InscriptionsMembres i')
->leftJoin('s.TypesCours t')
->where('s.date_heure > NOW()')
->andWhere('s.id NOT IN (SELECT i2.seance FROM InscriptionsMembres i2 WHERE i2.membre = ?)', $id)
->andWhere('t.noms = \'Espoir\'')
->andWhere('s.responsable <> ?', $id)
->orderBy('s.date_heure')
->having('COUNT(i.membre) <= 4');
Voici alors la requête SQL produite :
SELECT
s.id AS s__id,
s.date_heure AS s__date_heure,
s.commentaire AS s__commentaire,
s.responsable AS s__responsable,
s.type AS s__type,
i.membre AS i__membre,
i.seance AS i__seance,
t.id AS t__id,
t.noms AS t__noms
FROM seances s
JOIN inscriptions_membres i
ON s.id = i.seance
JOIN types_cours t
ON s.type = t.id
WHERE (
s.date_heure > NOW()
AND s.id NOT IN (
SELECT i2.seance AS i2__seance
FROM inscriptions_membres i2
WHERE (i2.membre = 1)
)
AND t.noms = 'Espoir'
AND s.responsable <> 1)
HAVING COUNT(i.membre) <= 4
ORDER BY s.date_heure
Cette requête qui normalement n'est pas censé produise de résultat dans MySQL me produit une ligne dans laquelle tous les champs du SELECT sont à NULL.
Lorsque j'enlève la clause HAVING, ce "bug" disparait.
Je ne comprends pas trop l'origine de cette ligne. Comment faire pour garder la clause HAVING sans conserver cette ligne de NULL ?
Dans MySQL, un count() sans GROUP BY retourne une seule ligne, ta requête ne risque pas de produire les résultats que tu attends...
Requête qui génère une ligne NULL
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site - Mon livre sur le XML - Mon blog