Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calcul avec Mysql

    13 octobre 2018 à 13:14:52

    Bonjour,

    j'ai cherché pendant un certain temps sur internet et je n'ai toujours pas trouvé de solution à mon problème qui ne doit pas être si compliqué que ça dans le fond..:euh:

    J'ai une table dans ma base de données qui contient des matchs joués qui ressemble à ça :

    Matchs : 

    • id
    • idEquipeA
    • idEquipeB
    • scoreA
    • scoreB

    L'équipe A est l'équipe jouant à domicile et la B est celle jouant à l'extérieur. (Chaque équipe peut donc se retrouver des deux cotés)

    J'aimerai que ma requête sql me sorte une colonne 'victoires' et une colonne 'défaites' en fonction du score. J'ai cette requête qui marche presque mais il me manque le petit ingrédient magique pour que j'arrive à incrémenter les bonnes colonnes.

    Ma requête :

    SELECT equipe.nom, equipe.id, matchs.scoreA as scoreA, matchs.scoreB as scoreB,
    #victoires
    CASE
        WHEN equipe.id = matchs.idEquipeA THEN
            CASE 
            WHEN scoreA > scoreB THEN 1 ELSE 0
            END 
        WHEN equipe.id = matchs.idEquipeB THEN
            CASE 
            WHEN scoreB > scoreA THEN 1 ELSE 0
            END 
    END as victoire,
    
    #défaites
    CASE
        WHEN equipe.id = matchs.idEquipeA THEN
            CASE 
            WHEN scoreA < scoreB THEN 1 ELSE 0
            END 
        WHEN equipe.id = matchs.idEquipeB THEN
            CASE 
            WHEN scoreB < scoreA THEN 1 ELSE 0
            END 
    END as defaite
    FROM equipe
    INNER JOIN matchs ON equipe.id = matchs.idEquipeA OR equipe.id = matchs.idEquipeB
    GROUP BY equipe.id

    J'arrive juste à avoir soit un 1 soit un 0 mais je n'arrive pas à incrémenter ces colonnes.
    Quelqu'un aurait une idée ? 

    Bonne journée et merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2018 à 13:19:35

      Bonjour,

      Tu ne peux pas afficher à la fois le détail ET le total ...

      Par ailleurs ton utilisation de GROUP BY est ici inadaptée ... merci à la tolérance de MySQL ...

      Tu veux le total ET le détail, ou tu ne veux que le total ?

      Pour le total :

      SELECT
      	equipe.nom,
      	equipe.id,
      	SUM( 
      		CASE
      			WHEN equipe.id = matchs.idEquipeA THEN
      				CASE
      				WHEN scoreA > scoreB THEN 1 ELSE 0
      				END
      			WHEN equipe.id = matchs.idEquipeB THEN
      				CASE
      				WHEN scoreB > scoreA THEN 1 ELSE 0
      				END
      		END
      	) as victoire,
      	SUM(
      		CASE
      			WHEN equipe.id = matchs.idEquipeA THEN
      				CASE
      				WHEN scoreA < scoreB THEN 1 ELSE 0
      				END
      			WHEN equipe.id = matchs.idEquipeB THEN
      				CASE
      				WHEN scoreB < scoreA THEN 1 ELSE 0
      				END
      		END
      	) as defaite
      FROM
      	equipe
      		INNER JOIN matchs
      			ON equipe.id = matchs.idEquipeA
      			OR equipe.id = matchs.idEquipeB
      GROUP BY
      	equipe.nom,
      	equipe.id

      -
      Edité par Benzouye 13 octobre 2018 à 13:22:36

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        14 octobre 2018 à 15:59:28

        Je ne sais pas si ça peux t'aider mais moi pour afficher les temps des joueurs d'une équipe (10 dedans par exemple), mais ne faire le total que des 3 premiers, donc afficher un total et un détail, j'avais fait un truc de ce genre là : 

        M1C1 = Manche 1 Course 1

        <?php
        $reponse = $bdd->query('SELECT (M1C1 + M1C2 ) AS totaltemps FROM confirm_flr WHERE team = "DTM" ORDER BY totaltemps ASC LIMIT 1');
        while ($donnees = $reponse->fetch())
        { $totalM1P1 = htmlspecialchars($donnees['totaltemps']); }
            
            
        $reponse = $bdd->query('SELECT (M1C1 + M1C2 ) AS totaltemps FROM confirm_flr WHERE team = "DTM" ORDER BY totaltemps ASC LIMIT 2');
        while ($donnees = $reponse->fetch())
        { $totalM1P2 = htmlspecialchars($donnees['totaltemps']); }
            
        
        $reponse = $bdd->query('SELECT (M1C1 + M1C2 ) AS totaltemps FROM confirm_flr WHERE team = "DTM" ORDER BY totaltemps ASC LIMIT 3');
        while ($donnees = $reponse->fetch())
        { $totalM1P3 = htmlspecialchars($donnees['totaltemps']); }
         
        $totalteamdtm = $totalM1P1 + $totalM1P2 + $totalM1P3;
         
        ?>
        
        <table>
        <td colspan="2">Temps total des 3 premiers</td>
            <td><?php echo $totalteamdtm; ?></td>
        </table>



        -
        Edité par Community Technologie 14 octobre 2018 à 16:00:31

        • Partager sur Facebook
        • Partager sur Twitter
          17 octobre 2018 à 8:45:04

          Bonjour,

          Merci pour vos 2 réponses c'est exactement ce qu'il me fallait !

          Bonne journee.

          • Partager sur Facebook
          • Partager sur Twitter

          Calcul avec Mysql

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown