Bonjour,
J'essaie de convertir une requête SQL dans Symfony pour calculer une position de classement en fonction des points d'un utilisateur.
La requête c'est celle-ci, elle fonctionne dans phpMyAdmin :
SELECT 1 + COUNT(*) AS rank FROM fc_user WHERE points > (SELECT points FROM fc_user WHERE user_id=2)
J'ai essayé ça :
$subquery = $this->createQueryBuilder('f')
->select('f.points')
->andWhere('f.user > :user')
->setParameter('user', $user)
->getQuery()
->getResult()
;
return $this->createQueryBuilder('f')
->select('1 + count(*) AS rank')
->andWhere('f.points > :subquery')
->setParameter('subquery', $subquery)
->getQuery()
->getOneOrNullResult()
;
Mais je me hurte à une erreur Expected Literal, got '*', je ne pense pas que ce soit la bonne méthode.
Auriez-vous une idée de comment l'écrire en Query Builder ?
Merci !
Merci, au final j'ai trouvé. Ma requête fonctionnait sauf qu'à la place de count(*) il fallait mettre count(f.points).
Ca reste une supposition :
Met un autre alias à ta subquerry et retire le getQuery()->getResult()
subquery = $this->createQueryBuilder('s')
->select('s.points')
->andWhere('s.user > :user')
->setParameter('user', $user)
;
return $this->createQueryBuilder('f')
->select('1 + count(*) AS rank')
->andWhere('f.points > :subquery')
->setParameter('subquery', $subquery)
->getQuery()
->getOneOrNullResult()
;