Bonjour,

alors voila j'ai une table "réponse" qui contient

id -----|------ user_id--------|---- question_id --|------value
1-----------------13-----------------------1-------------------------4
2-----------------13-----------------------2-------------------------3
3-----------------17-----------------------3-------------------------1
4-----------------17-----------------------4-------------------------4

je voudrais faire une requête qui récupére la somme des value de l'user connectée ici on a user avec l'id 13 et l'user avec l'id 17

id 13 = 7 point et id 17 = 5 points

j'avais fais cela dans le repository

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

public function getNb($user) {

        return $this->createQueryBuilder('R','U')

                        ->select('SUM(R.value)')

                        ->getQuery()

                        ->getSingleScalarResult();

    }

cela marche mais me récupere tous les points de la table (user confondu)

moi je veux selon l'id conecté car apres je dois faire des calculs genre la somme des 2 premiers choix
EXEMPLE:

choix1:
Je donne régulièrement aux oeuvres de charité.

3
2
1
0

choix:2
J'éprouve beaucoup de plaisir à pouvoir aider quelqu'un en détresse.

3
2
1
0

TOTAL ALT total des valeurs de choix 1 et choix 2

choix3:
Il vaut mieux être pauvre et méconnue mais honnête que d'accepter des compromis pour devenir riche et estimé.

3
2
1
0

choix 4:
Je peux dire très honnêtement que je n'ai jamais cédé à la tentation d'utiliser des moyens douteux pour arriver à un but.

3
2
1
0

TOTAL ETH total des valeurs de choix 3 et choix 4

Je sais que je dois passer par une requete avec jointure mais je sais pas comment faire je suis tres limité en sql dql

Merci a vous

4 réponses


JackSteller
Auteur
Réponse acceptée

hello merci deja alors voila ce que j'ai fait et ca fonctionne

public function getQuoi($userslp) {

       return $this->createQueryBuilder('r')
                        ->select('SUM(r.value)')
                        ->join('r.userSlp', 'u')
                        ->where('r.userSlp = :userSlp')
                        ->andWhere('r.question <= 65')
                        ->setParameter('userSlp', $userslp) 
                        ->getQuery()
                        ->getSingleScalarResult();

    }

pour les 65 premieres question et je vais faire ca pour toute les requetes parceque j'avais essayé le (setfirst..setmax..)mais cela ne fonctionnais pas alors je sais pas si je l'ai mal fait... par contre pour la 2eme question j'avais pensé reprendre la requete et l'adapter mais je vais essayer ta solution et je te tiens au courant

Salut,

J'imagine que tu as une relation ManyToOne entre Reponse et User?
Dans ce cas, tu peux faire :

return $this->createQueryBuilder('r')
                        ->select('SUM(r.value)')
                        ->join('r.user', 'u')
                        ->where('r.user = :user')
                        ->setParameter('user', $user) 
                        ->getQuery()
                        ->getSingleScalarResult();

Super!! ca marche merci beaucoup
En faite j'ai 2 demandes
la premiere : est ce que je peut ajouter dans cette meme requete un tri du genre sur 200 questions..prend les 65 premieres ensuite refaire une requete que je nommerais diféremment ou je prendrais les 60 suivantes..etc..

et pour ma deuxieme demande:pour le total des choix par 2 dois-je faire une requete du meme style ou j'ajoute les numeros de question dans la requete?
choix1:
3 2 1 0 => je coche 2
choix:2
3 2 1 0 => je coche 3
total ALT = 5

Hello,
Pour la première question, utilise les méthodes setFirstResult et setMaxResults. Va faire un tour sur la doc Doctrine.
Si tu veux paginer tes résultats tu as le bundle KnpPaginator qui est très bien.
Pour ta 2ème questions, il y a plusieurs approches possibles. Soit tu utilises les expressions (https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/query-builder.html#high-level-api-methods), ou + simple tu utilises "IN", suivant ce que tu veux faire :
$qb->andWhere('r.question IN (:questions)');
$qb->setParameter('questions', [1, 2], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);