[RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 25 juin 2019, 23:11

ok du cou j'ai fait ca
 public function getQuoi($userslp) {
       $result = $this->createQueryBuilder('r')
                ->select('COUNT(r.manger) AS nbQuestion, SUM(r.value) AS totValue')
                ->Where('r.userSlp = :userSlp AND r.manger <= 65')
                ->setParameter('userSlp', $userslp)
                ->getQuery()
                ->getScalarResult();

            return $result;
Par contre il demandais un getscalar non un single etant donné que cela retourne un double tableau
et ensuite dans mon controller
$totalQuoi = $reponseMangerRepo->getQuoi($userSlp);

$totalQuoi[0]['totValue']//si je veu le total des valeurs
$totalQuoi[0]['nbQuestion']//le nbr de question 
et dans ma vu
 {% if totalQuoi[0]['totValue'] > 0 and totalQuoi[0]['totValue'] <= 32.4
              and totalQuoi[0]['nbQuestion'] == 65 %}
            <h4>Theme <b>"Quoi"</b></h4>
            {{ miniprofil[13].description}}
            <hr>
            {% endif %}
je sais c'est moche mais j'arrive a obtenir ce que je veux..

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 25 juin 2019, 16:40

Bah tu peux le faire la où tu appelles getQuoi ou dans le getQuoi, c'est comme tu préfères, selon la manière dont tu veux que ça se comporte.

Tu pourrais par exemple faire ça :
public function getQuoi($userslp) {
  $result = $this->createQueryBuilder('r')
    ->select('COUNT(r.manger) AS nbQuestion, SUM(r.value) AS totValue')
    ->Where('r.userSlp = :userSlp AND r.manger <= 65')
    ->setParameter('userSlp', $userslp)
    ->getQuery()
    ->getSingleScalarResult();

  return $result['nbQuestion'] == 65
    ? $result // ou $result['totValue'] si tu veux juste retourner le total
    : null;
}

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 25 juin 2019, 15:10

Tout d'abord Merci de ta patiente je sais que suis lourd..

alors ou dois'je faire cette verification?
le $ result je le place ou?
public function getQuoi($userslp) {
       return $this->createQueryBuilder('r')              
                        ->select('COUNT(r.manger) AS nbQuestion, SUM(r.value) AS totValue')                       
                        ->Where('r.userSlp = :userSlp AND r.manger <= 65')
                        ->setParameter('userSlp', $userslp) 
                        ->getQuery()
                        ->getSingleScalarResult();

                         if ($result['nbQuestion'] == 65){

                            //...ici?
                         }
    }
ou alors dans mon controller?

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 24 juin 2019, 12:41

Étrange si c'est une erreur SQL car il me semble qu'il n'y a pas de raison que SQL ne reconnaisse pas un alias déclaré dans le SELECT et utilisé dans le WHERE... à vérifier. Si c'est le DQL qui remonte l'erreur pourquoi pas.

En tout cas tu peux toujours te contenter de vérifier le résultat avec $result = /*...*/->getSingleScalarResult(); if ($result['nbQuestion'] == 65)

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 24 juin 2019, 10:59

en faite il ne reconnais pas le nbQuestion.. quand je le passe dans le where #-o

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 23 juin 2019, 22:48

Saian figure toi que j'avais essayé et ça me mettais cette erreur



An exception occurred while executing 'SELECT COUNT(r0_.question_id) AS sclr_0, SUM(r0_.value) AS sclr_1 FROM Reponse_thematique r0_ WHERE r0_.user_slp_id = ? AND sclr_0 = 65' with params [13]:

SQLSTATE[42S22]: Column not found: 1054 Champ 'sclr_0' inconnu dans where clause

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 23 juin 2019, 21:43

Rien ne t’empêches d'ajouter un nbQuestion = 65 dans le where.

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 23 juin 2019, 15:22

 public function getQuoi($userslp) {
       return $this->createQueryBuilder('r')              
                        ->select('COUNT(r.question) AS nbQuestion, SUM(r.value) AS totValue')                       
                        ->Where('r.userSlp = :userSlp AND r.question <= 65')
                        ->setParameter('userSlp', $userslp) 
                        ->getQuery()
                        ->getScalarResult();
    }
hello voila ce que me retourne la requete
array:1 [▼
  0 => array:2 [▼
    "nbQuestion" => "10"
    "totValue" => "50"
  ]
]
l'ideale serait de dire tant que "nbQuestion" n'est pas egal a 65 ..j'avais pensé a la fonction SQL du case then mais avec query builder c'est pas possible i me semble

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 21 juin 2019, 22:18

C'était mal écris oui ça devait être :
->select('COUNT(r.question) AS nbAnswers, SUM(r.value) AS totValue') 

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 20 juin 2019, 13:31

ok je vais essayer ca.. par contre cette ligne je comprend pas tro
->select('COUNT(question) AS nbAnswers, SUM(r.value)') AS totValue
je dois faire un select COUNT(r.question)? ensuite nbAnswers je le défini comment du coup? #-o

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 19 juin 2019, 11:25

Tu pourrais compter les questions pour savoir si y en a 65. Pas sur que la syntaxe fonctionne mais dans le genre
return $this->createQueryBuilder('r')
  ->select('COUNT(question) AS nbAnswers, SUM(r.value)') AS totValue
  ->where('r.userSlp = :userSlp AND r.question <= 65')
  //->where('r.userSlp = :userSlp AND r.question <= 65 AND nbAnswers = 65')
  ->setParameter('userSlp', $userslp)
  ->getQuery()->getSingleResult();

Re: [RESOLU] requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 19 juin 2019, 04:13

Désolé :D mais Comment pourrais-je verifier si les input a été checker? je voudrais afficher la requête que si les 65 premières... questions ont été checker
Parce-que la si la personne répond au question sans allez a la jusque la 65 il obtient quand même un résultat est ce que l'on peut utiliser un truck du genre if(isset($_POST['65]))......ma requête.. en js ou php faisable sur la page en cours mais c'est assez specifique

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 15 juin 2019, 03:22

Je pense comme ça :
return $this->createQueryBuilder('r')
  ->select('SUM(r.value)')
  ->join('r.question', 'q')
  ->where('r.userSlp = :userSlp AND q.id <= 65')
  ->setParameter('userSlp', $userslp)
  ->getQuery()->getSingleScalarResult();
LIMIT (setFirstResult et setMaxResults) ne peut pas fonctionner étant donné que ça sert à définir quelle partie tu veux récupérer des lignes du résultat et que la tu n'as qu'une ligne en retour.

D'ailleurs si r.question <= 65 fonctionne alors ça devrait suffire :
return $this->createQueryBuilder('r')
  ->select('SUM(r.value)')
  ->where('r.userSlp = :userSlp AND r.question <= 65')
  ->setParameter('userSlp', $userslp)
  ->getQuery()->getSingleScalarResult();

En fait ce que tu as fait est très bien du coup. ^^

Les jointures ne sont utiles que si tu veux hydrater tout le result set ou si tu as besoin d'utiliser les colonnes des tables jointes dans ton query builder.

La c'est inutile puisque la requête au final c'est :
SELECT SUM(r.value) FROM reponse r WHERE r.user_id = :id AND r.question_id <= 65

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par isaac » 15 juin 2019, 01:31

Salut Saian du coup j'avais fais cela
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();

    };
Ce que je voulais faire c'etais filtrer le resultat par rapport au nombre de questions donc j'ai ajouté un

andwhere( 'r.question <= 65) //ceci pour allez jusque la question 65 ensuite créé une nouvel requête pour allez de 65 a 80 par exemple ainsi de suite...je sais pas si c'est la meilleur solution tu me dira tant que cela fonctionne ..;) mais j'avais essayé de faire cela avec setfirst et set max mais cela fonctionne pas peut tu me dire ou le placer?

Re: requete SQL ou DQL pour récupérer valeurs de l'utilisateur en cours et effectuer un calcul

par Saian » 14 juin 2019, 16:30

Salut isaac, tu n'as pas besoin de faire de jointure.
Avec propriété de jointure $user :
public function getNb($user)
{
  return $this->createQueryBuilder('R')
    ->select('SUM(R.value)')
    ->where('R.user = :user')
    ->setParameter('user', $user)
    ->getQuery()->getSingleScalarResult();
}