Somme dans une requête

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Somme dans une requête

    Bonjour,
    Je cherche une documentation sur la fonction Sum je ne trouve pas.
    J'ai besoin de faire la somme des valeurs de la colonne "longueur" de la table #__randonne_portion.

    Je regarde du côté de https://docs.joomla.org/Selecting_da...g_JDatabase/fr

    J'ai une requête qui me permet d'afficher toutes les informations dont j'ai besoin, y compris la longueur de chaque enregistrement, mais j'ai besoin également de faire la somme de ces longueurs.

    Code PHP:
    foreach ($listPortions as $listePortions) {
        $IdPortions = trim($listePortions);
        //print_r($IdPortions);

            $db = JFactory::getDbo();
            $query = $db->getQuery(true);
            $query->select(array('id','libelle','commentaire','point_a','point_b','denivele_positif','denivele_negatif','longueur','difficulte','duree_moyenne'))
                 ->from($db->quoteName('#__randonne_portion'))
                 ->where($db->quoteName('id')." = ".$db->quote($IdPortions));
            $db->setQuery($query);
            $ListInfoPortions = $db->loadAssoc();
            //print_r($ListInfoPortions);

            ?>
    <div class="parcours">
          <?php echo ", dénivelé positif "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions[denivele_positif]. '</span>'; echo $metres?>
    </div>
    <div class="parcours">
            <?php echo ", distance de "; echo '<span style="font-weight:900;color:#faa932"> ' $ListInfoPortions[longueur]. '</span>'; echo $Km?>
    </div>
    ...
    }
    Comment puis-je utiliser la fonction SUM?

    Cordialement.

    Eric


    Dernière édition par Agrepe à 28/01/2020, 19h30

  • #2
    Hello.

    Difficile de t'aider en ne connaissant pas ce que tu cherches préceisement à faire.

    Il faut que ta condition permette le regroupement des éléments dont tu veux faire la somme.

    Si dans la requêtte tu cherches d'autres rubriques que la somme d'une rubrique, il faut que leur valeur retournée soit identique pour tous les enregistrements que tu veux additionner et rajouter un GROUP BY ces rubriques.

    Juste une petite remarque, ne pas mettre de guillemets dans l'indice de tes tableau, si ce sont des litéraux est dangereux, php peut les interpréter comme des constantes.

    Il ne faut pas faire :
    Code PHP:
    $ListInfoPortions[longueur
    mais
    Code PHP:
    $ListInfoPortions['longueur'
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      Bonjour,
      Je souhaite faire la somme des valeurs des longueurs renvoyées par la requête.

      Par exemple le foreach (Le code est dans le premier message de cette discussion) permet d'afficher les résultats de la requête :
      $ListInfoPortions['libelle'] $ListInfoPortions['longueur']
      AAA 1.5
      BBB 3.4

      Je souhaite faire la somme de 1.5 et 3.4.

      Cordialement.

      Eric

      Commentaire


      • #4
        Hello.

        Le fait que le libellé soit différent oblige la requête à renvoyer plusieurs résultats, le SUM ne peut donc pas marcher.

        Le + simple est de mettre le SUM('longueur') tout seul dans la requête.

        Sinon comme je te l'ai déjà indiqué il faut que toutes les valeurs retournées des autres rubriques de ta requête soient identiques (sauf celles qui ont les fonctions d’agrégation -le SUM par exemple-) et faire un GROUP BY de ces autres rubriques afin que la requête ne retourne qu'un seul résultat.
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire


        • #5
          Bonsoir Roland,
          Merci pour ta réponse et les pistes que tu me donnes.
          Je vais chercher à me documenter en ce sens, je ne sais pas faire ça.

          J'ai fait: $query->select('sum('.$db->quoteName('longueur').')');

          Code PHP:
          $db JFactory::getDbo();
                          
          $query $db->getQuery(true);
                          
          $query->select('sum('.$db->quoteName('longueur').')');
                          
          $query->select(array('id','libelle','commentaire','point_a','point_b','denivele_positif','denivele_negatif','longueur','difficulte','duree_moyenne'))
                          ->
          from($db->quoteName('#__randonne_portion'))
                          ->
          where($db->quoteName('id')." = ".$db->quote($IdPortions));
                          
          $db->setQuery($query);
                          
          $ListInfoPortions $db->loadAssoc(); 
          Mais je ne sais pas comment récupérer la somme.

          Cordialement.
          Eric
          Dernière édition par Agrepe à 30/01/2020, 22h00

          Commentaire


          • #6
            Envoyé par Agrepe Voir le message
            Mais je ne sais pas comment récupérer la somme.
            ça devrait le faire ainsi
            $query->select('sum('.$db->quoteName('longueur').') AS somme_longueur');
            Je préfère éclairer que briller.” - “J'ai peut-être l'air froid, mais je suis pas givré.- "ça dépend ça dépasse"
            Ne m'envoyez pas de message privé pour résoudre vos problèmes sans y avoir été invité.
            Dolmenhir : tailleur de site web depuis 1997. Spécialiste Joomla depuis 2005. https://www.dolmenhir.fr

            Commentaire


            • #7
              Envoyé par Agrepe Voir le message
              J'ai fait: $query->select('sum('.$db->quoteName('longueur').')');

              Code PHP:
              $db JFactory::getDbo();
              $query $db->getQuery(true);
              $query->select('sum('.$db->quoteName('longueur').')');
              $query->select(array('id','libelle','commentaire','point_a','point_b','denivele_positif','denivele_negatif','longueur','difficulte','duree_moyenne'))
              ->
              from($db->quoteName('#__randonne_portion'))
              ->
              where($db->quoteName('id')." = ".$db->quote($IdPortions));
              $db->setQuery($query);
              $ListInfoPortions $db->loadAssoc(); 
              Mais je ne sais pas comment récupérer la somme.

              Cordialement.
              Eric
              Hello.

              Quitte à me re-répeter, ta requête ne marchera pas, tu ne peux pas sélectionner SUM('longueur') ET 'longueur' dans la même requête car tu auras autant de lignes retournées que de résultats à ta condition.
              Ton SUM('longueur') sera donc toujours égal à 'longueur'.

              Idem si tu rajoutes un $query->group('longueur') car tu auras autant de lignes retournées de que valeurs de 'longueur' différentes correspondant à ta condition.

              Relis mes réponses ci-dessus concernant les rubriques sélectionnées simultanément avec un SUM ou toute autre fonction d'agrégation.

              Essaie déjà avec le select SUM('longueur') AS somme_longueur tout seul dans le select sans autres rubriques (supprime ton 2ème $query->select)
              Dernière édition par roland_d_alsace à 31/01/2020, 10h26
              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
              Rejoignez le Joomla Users Groupe Alsace...
              roland_d_alsace va-t-il devenir roland_du_grand_est ?

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X