Question

comment puis-je utiliser le résultat de la fonction d'agrégation dans où dans la doctrine?

Par exemple, je veux connaître les utilisateurs avec beaucoup de chiffres stupides.

SELECT  u.name, COUNT(p.id) AS users_phonenumber_count
FROM    users u

    INNER JOIN phonenumbers p ON p.user_id = u.id
WHERE
    users_phonenumber_count > 10
GROUP BY
    u.id

Comment puis-je accéder au users_phonenumber_count dans où dans Dql?

Était-ce utile?

La solution

Vous devez utiliser HAVING, pas WHERE. En outre, vous devez regrouper par quelque chose qui est réellement dans votre requête, dans ce cas, u.name. En supposant que u.name est unique - sinon, vous devez grouper à la fois par u.id et u.name.

SELECT  u.name, COUNT(*) AS users_phonenumber_count
FROM    users u

    INNER JOIN phonenumbers p ON p.user_id = u.id
GROUP BY
    u.name
HAVING
    count(*) > 10

Autres conseils

Je ne me souviens pas des détails exacts de la manière dont je l'ai fait, mais souvenez-vous qu'il devait utiliser & "AYANT &";

Cela est dû à la façon dont fonctionne SQL, pas spécifiquement à la doctrine - WHERE ne peut pas comparer les valeurs calculées, vous devez utiliser having (ou vous pouvez faire WHERE COUNT (quelque chose) < quelque chose)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top