Pregunta

¿cómo puedo usar el resultado de la función Agregate en where in Doctrine?

Por ejemplo, quiero conocer al usuario con muchos números tontos.

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

¿Cómo puedo acceder a users_phonenumber_count en dónde en Dql?

¿Fue útil?

Solución

Necesitas usar HAVING, no DONDE. Además, debe agrupar por algo que está realmente en su consulta, en este caso u.name. Asumiendo que u.name es único; de lo contrario, debe agrupar por u.id y 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

Otros consejos

No puedo recordar detalles exactos de cómo hice esto, pero recuerda que tenía que usar " HAVING "

Esto se debe a la forma en que funciona SQL, no específicamente a la doctrina: DONDE no se pueden comparar los valores calculados, se debe usar tener (o se puede hacer WHERE COUNT (algo) < algo)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top