Récupérer le rang d'un utilisateur selon ses points - Symfony

Par chead241, il y a 5 ans


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 !

2 réponses

Kareylo, il y a 5 ans

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() ;
chead241, il y a 5 ans

Merci, au final j'ai trouvé. Ma requête fonctionnait sauf qu'à la place de count(*) il fallait mettre count(f.points).