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?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top