Dottrina: filtro per valore aggregato esterno
-
10-07-2019 - |
Domanda
come posso usare il risultato della funzione di aggregazione in where in Doctrine?
Ad esempio, voglio conoscere l'utente con molti numeri sciocchi.
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
Come posso accedere al users_phonenumber_count da dove in Dql?
Soluzione
Devi usare HAVING, non DOVE. Inoltre, devi raggruppare per qualcosa che è effettivamente nella tua query, in questo caso u.name. Supponendo che u.name sia unico - in caso contrario, è necessario raggruppare per u.id e 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
Altri suggerimenti
Non ricordo i dettagli esatti di come l'ho fatto, ma ricordo che doveva usare " HAVING "
Questo è dovuto al modo in cui funziona SQL, non specificatamente alla dottrina - DOVE non è possibile confrontare i valori calcolati, è necessario utilizzare avendo (o si potrebbe fare DOVE COUNT (qualcosa) < qualcosa)