IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Calcul points de plusieurs events et membres


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Calcul points de plusieurs events et membres
    Bonjour à tous,

    Je suis en plein test de mes compétences en php et mysql et je bloque sur un point assez précis. J'ai créé un site où l'on peut réaliser des pronostics sur plusieurs matchs et je souhaiterais calculer de façon global les points et les statistiques des membres simultanément. J'ai donc réussi à sortir un bout de code qui me permet de réaliser cela mais sur un match (match n°1) sauf que j'aimerais pouvoir faire cela plus rapidement pour les matchs à venir et cumuler les points et stats.

    J'ai donc 3 tables:
    • -membres (id, stats pronostic parfait, stats bons pronos, points)
    • -matchs (id, home_score, away_score, et les différentes cote)
    • -membres_matchs (id_matchs, id_membres, et les pronostics)


    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    $calcscore1=$bdd->query('SELECT * FROM membres_matchs, matchs, membres WHERE id_membres = membres.id AND id_matchs=matchs.id AND id_matchs=1');
    while ($scoredonnees = $calcscore1->fetch())
    {
     
    if ($scoredonnees['home_score']==$scoredonnees['homeprono'] AND $scoredonnees['away_score']==$scoredonnees['visiteprono'] AND $scoredonnees['home_score']!='') {
      $bonscore1=0;
      $bonprono1=0;
      if ($scoredonnees['home_score']>$scoredonnees['away_score']) {
      $scorexacte1= $scoredonnees['cote_home']*2;
      $pronoparfait1=1;
      }
      else if ($scoredonnees['home_score']==$scoredonnees['away_score']) {
      $scorexacte1= $scoredonnees['cote_nul']*2;
      $pronoparfait1=1;
     
      }
      else if ($scoredonnees['home_score']<$scoredonnees['away_score']) {
      $scorexacte1= $scoredonnees['cote_away']*2;
      $pronoparfait1=1;
      }
    }
     
    else if ($scoredonnees['home_score']<$scoredonnees['away_score'] AND $scoredonnees['homeprono']<$scoredonnees['visiteprono'] ) {
      if ($scoredonnees['home_score']<$scoredonnees['away_score']) {
      $bonprono1=$scoredonnees['cote_away'];
      $bonscore1=1;
      $scorexacte1=0;
      $pronoparfait1=0;
      }
    }
     
    else if ($scoredonnees['home_score']>$scoredonnees['away_score'] AND $scoredonnees['homeprono']>$scoredonnees['visiteprono'] ) {
      if ($scoredonnees['home_score']>$scoredonnees['away_score']) {
      $bonprono1=$scoredonnees['cote_home'];
      $bonscore1=1;
      $scorexacte1=0;
      $pronoparfait1=0;
     
      }
    }
     
    else if ($scoredonnees['home_score']==$scoredonnees['away_score'] AND $scoredonnees['homeprono']==$scoredonnees['visiteprono'] ) {
      if ($scoredonnees['home_score']==$scoredonnees['away_score']) {
      $bonprono1=$scoredonnees['cote_nul'];
      $bonscore1=1;
      $scorexacte1=0;
      $pronoparfait1=0;
      }
    }
     
    else{
      $scorexacte1=0;
      $bonprono1=0;
      $bonscore1=0;
      $pronoparfait1=0;
     
    }
     
    $totalpronoexact=$scorexacte1;
    $totalbonprono=$bonprono1;
    $totalpoints=$totalpronoexact+$totalbonprono;
     
    $bonprono=$bonscore1;
    $pronoparfait=$pronoparfait1;
     
    $id_membres=$scoredonnees['id_membres'];
     
    $validscoretot = $bdd->prepare("UPDATE membres SET
       pronos_exacts=:pronoparfait,
       bons_pronos=:bonprono,
       points=:totalpoints
       WHERE id=:id_membres ");
    $validscoretot->execute(array(
       'pronoparfait'=> $pronoparfait,
       'bonprono'=> $bonprono,
       'totalpoints'=> $totalpoints,
       'id_membres'=> $id_membres,
    ));
    }
    En vous remerciant pour votre aide.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Complement
    Voici le code avec des explications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    $calcscore1=$bdd->query('SELECT * FROM membres_matchs, matchs, membres WHERE id_membres = membres.id AND id_matchs=matchs.id AND id_matchs=1');
    while ($scoredonnees = $calcscore1->fetch())
    {
    if ($scoredonnees['home_score']==$scoredonnees['homeprono'] AND $scoredonnees['away_score']==$scoredonnees['visiteprono'] AND $scoredonnees['home_score']!='')
    //si le pronostic fait sur l'équipe à domicile est strictement identique au résultat correspondant ainsi que si le pronostic de l'équipe visiteuse est aussi identique (pronostic parfait) et si ces deux scores sont égaux (match nul avec un pronostic parfait)
    {
    $bonscore1=0; //0 car bonscore (points correspondant) est défini pour les bon pronostic (victoire nul défaite) mais pas pour les scores exacts
    $bonprono1=0; // idem pour bonprono (stats)
    if ($scoredonnees['home_score']>$scoredonnees['away_score'])
    // si victoire de l'équipe à domicile
    {
    $scorexacte1= $scoredonnees['cote_home']*2; // on reprend la cote correspondant à la victoire à domicile multipliée par 2 car pronostic parfait
    $pronoparfait1=1; // cela correspond à un pronostic parfait donc à ajouter au stats de pronostic parfait +1
    }
    else if ($scoredonnees['home_score']==$scoredonnees['away_score'])
    // si match nul avec prono parfait
    {
    $scorexacte1= $scoredonnees['cote_nul']*2;// on reprend la cote correspondant au match nul multipliée par 2 car pronostic parfait
    $pronoparfait1=1;// cela correspond à un pronostic parfait donc à ajouter au stats de pronostic parfait +1
    }
    else if ($scoredonnees['home_score']<$scoredonnees['away_score']) // si victoire à l'extérieur avec prono parfait
    {
    $scorexacte1= $scoredonnees['cote_away']*2;// on reprend la cote correspondant à la victoire à l'extérieur multipliée par 2 car pronostic parfait
    $pronoparfait1=1;// cela correspond à un pronostic parfait donc à ajouter au stats de pronostic parfait +1
    }
    }
    else if ($scoredonnees['home_score']<$scoredonnees['away_score'] AND $scoredonnees['homeprono']<$scoredonnees['visiteprono'] )
    //si victoire à l'extérieur et pronostic non parfait mais correspondant à une victoire à l'extérieur
    {
    if ($scoredonnees['home_score']<$scoredonnees['away_score']) // si victoire à l'extérieur
    {
    $bonprono1=$scoredonnees['cote_away'];// on reprend la cote correspondant à la victoire à l'extérieur brute
    $bonscore1=1;// cela correspond à un pronostic non parfait mais bon donc à ajouter au stats de bon pronostic +1
    $scorexacte1=0; // pas de prono parfait donc pas de points correspondant
    $pronoparfait1=0; // idem pour les stats
    }
    }
     
    else if ($scoredonnees['home_score']>$scoredonnees['away_score'] AND $scoredonnees['homeprono']>$scoredonnees['visiteprono'] )
    //si victoire à domicile et pronostic non parfait mais correspondant à une victoire à domicile {
    if ($scoredonnees['home_score']>$scoredonnees['away_score'])
    // si victoire à domicile {
    $bonprono1=$scoredonnees['cote_home'];// on reprend la cote correspondant à la victoire à domicile brute
    $bonscore1=1;// cela correspond à un pronostic non parfait mais bon donc à ajouter au stats de bon pronostic +1
    $scorexacte1=0;// pas de prono parfait donc pas de points correspondant
    $pronoparfait1=0;// idem pour les stats
    }
    }
     
    else if ($scoredonnees['home_score']==$scoredonnees['away_score'] AND $scoredonnees['homeprono']==$scoredonnees['visiteprono'] )
    //si match nul et pronostic non parfait mais correspondant à un match nul
    {
    if ($scoredonnees['home_score']==$scoredonnees['away_score']) {
    $bonprono1=$scoredonnees['cote_nul'];// on reprend la cote correspondant à un match nul brute
    $bonscore1=1;// cela correspond à un pronostic non parfait mais bon donc à ajouter au stats de bon pronostic +1
    $scorexacte1=0;// pas de prono parfait donc pas de points correspondant
    $pronoparfait1=0;// idem pour les stats
    }
    }
     
    else{
    //si aucun des cas précédents (soit un mauvais pronostic) alors tous les points et stats à 0.
    $scorexacte1=0;
    $bonprono1=0;
    $bonscore1=0;
    $pronoparfait1=0;
     
    }
     
    $totalpronoexact=$scorexacte1; //Récap des points correspondant à des pronos exacts
    $totalbonprono=$bonprono1; // idem pour les bons pronos
    $totalpoints=$totalpronoexact+$totalbonprono;//Cumul des points des bons pronos et des pronostics parfait pour en déduire le score total
     
    $bonprono=$bonscore1; // recap du nombre de bons pronostics
    $pronoparfait=$pronoparfait1;// recap du nombre de pronos parfaits
     
    $id_membres=$scoredonnees['id_membres'];
     
    $validscoretot = $bdd->prepare("UPDATE membres SET
    pronos_exacts=:pronoparfait,
    bons_pronos=:bonprono,
    points=:totalpoints
    WHERE id=:id_membres ");
    $validscoretot->execute(array(
    'pronoparfait'=> $pronoparfait,
    'bonprono'=> $bonprono,
    'totalpoints'=> $totalpoints,
    'id_membres'=> $id_membres,
    ));
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    la première chose à faire est d'écrire correctement la requête.

    Avec une table de liaison, on utilise une jointure avec INNER JOIN.

    Ta requête actuelle devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $id_match = 1;
    $sql = "SELECT * 
    	FROM matchs MA
    	INNER JOIN membres_matchs MM
    	   ON MA.id = MM.id_matchs
    	INNER JOIN membres MB
    	   ON MB.id = MM.id_membres
    	WHERE MM.id_matchs = :id_match";
    $query = $bdd->prepare( $sql ); // on prépare la requête (car on ne met jamais des données externes directement dedans)
    $query->execute( array( ':id_match' => $id_match) ); // on exécute
    Pour tous les matchs, il suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT * 
    	FROM matchs MA
    	INNER JOIN membres_matchs MM
    	   ON MA.id = MM.id_matchs
    	INNER JOIN membres MB
    	   ON MB.id = MM.id_membres
    	GROUP BY MM.id_matchs";
    $query = $bdd->query( $sql ); // pas de données externes : on peut utiliser ->query()

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut INNER JOIN
    Merci pour cette réponse,
    Si je comprends bien je n'ai pas besoin de la fonction While. Et il me suffira pour le cumul des points et stats d'utiliser $i++ et =+.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ben si....
    Il faudra bien parcourir les résultats obtenus.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Cumul fait
    Bonsoir,
    Tout d'abord je voulais vous remercier car l'amélioration de la requête m'a permis d'avancer. J'ai donc réussi à effectuer le calcul souhaité (cumul stats et points) cependant ce calcul se fait un seul et unique membre. Or j'aimerais que cela s'effectue sur l'ensemble des membres en simultané.
    Je bloque à ce niveau.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
     
    $sql = "SELECT * 
      FROM matchs MA
      INNER JOIN membres_matchs MM
         ON MA.id = MM.id_matchs
      INNER JOIN membres MB
         ON MB.id = MM.id_membres
      GROUP BY MM.id_matchs";
    $query = $bdd->query($sql); 
    $scorexacte1=0;
      $bonprono1=0;
      $bonscore1=0;
      $pronoparfait1=0;
    while ($scoredonnees1 = $query->fetch())
    { 
     
    if ($scoredonnees1['home_score']==$scoredonnees1['homeprono'] AND $scoredonnees1['away_score']==$scoredonnees1['visiteprono'] AND $scoredonnees1['home_score']!='') {
      $pronoparfait1++;
      if ($scoredonnees1['home_score']>$scoredonnees1['away_score']) {
      $scorexacte1+=$scoredonnees1['cote_home']*2;
      }
      else if ($scoredonnees1['home_score']==$scoredonnees1['away_score']) {
      $scorexacte1+=$scoredonnees['cote_nul']*2;
      }
      else if ($scoredonnees1['home_score']<$scoredonnees1['away_score']) {
      $scorexacte1+=$scoredonnees1['cote_away']*2;
      }
    }
     
    else if ($scoredonnees1['home_score']<$scoredonnees1['away_score'] AND $scoredonnees1['homeprono']<$scoredonnees1['visiteprono'] ) {
      if ($scoredonnees1['home_score']<$scoredonnees1['away_score']) {
      $bonprono1+=$scoredonnees1['cote_away'];
      $bonscore1++;
      }
    }
     
    else if ($scoredonnees1['home_score']>$scoredonnees1['away_score'] AND $scoredonnees1['homeprono']>$scoredonnees1['visiteprono'] ) {
      if ($scoredonnees1['home_score']>$scoredonnees1['away_score']) {
      $bonprono1+=$scoredonnees1['cote_home'];
      $bonscore1++;
      }
    }
     
    else if ($scoredonnees1['home_score']==$scoredonnees1['away_score'] AND $scoredonnees1['homeprono']==$scoredonnees1['visiteprono'] AND $scoredonnees1['homeprono']!='' AND $scoredonnees1['visiteprono']!='') {
      if ($scoredonnees1['home_score']==$scoredonnees1['away_score']) {
      $bonprono1+=$scoredonnees1['cote_nul'];
      $bonscore1++;
      }
    }
     
     
    $totalpronoexact=$scorexacte1;
    $totalbonprono=$bonprono1;
    $totalpoints=$totalpronoexact+$totalbonprono;
     
    $bonprono=$bonscore1;
    $pronoparfait=$pronoparfait1;
     
    $id_membres=$scoredonnees1['id_membres'];
     
    $validscoretot = $bdd->prepare("UPDATE membres SET 
    	pronos_exacts=:pronoparfait, 
    	bons_pronos=:bonprono, 
    	points=:totalpoints
    	WHERE id=:id_membres ");
    $validscoretot->execute(array(
    	'pronoparfait'=> $pronoparfait,
    	'bonprono'=> $bonprono,
    	'totalpoints'=> $totalpoints,
    	'id_membres'=> $id_membres,
    ));
    }
    En vous remerciant par avance

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $validscoretot = $bdd->prepare("UPDATE membres SET 
    ...
    	WHERE id=:id_membres ");
    $validscoretot->execute(array(
    ...
    	'id_membres'=> $id_membres,
    ));
    C'est toi qui a décidé de faire la requête pour un seul membre...


    A toi d'adapter (et de comprendre la logique de ton code).

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Membre
    J'ai ajouté cette partie car sans cela l'ensemble des membres avait le même score... Il semble donc avoir une solution à ce problème.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Foreach
    Une fonction Foreach ferait elle l’affaire?
    Avec : Foreach(scoredonnees1[‘id_members’] as Idmembre)
    Et dans cette condition j’insere mon UPDATE?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est toi qui a écrit le code, ou pas ?
    Car si tu l'as écrit, tu devrais le comprendre, non ?

    Commence déjà par indenter proprement ton code, on y verra plus clair !


    Voici une solution (sans trop chambouler ton code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    // ------------------
    // 1ère requête : on récupère les id des membres
    $sql = "SELECT DISTINCT MM.id_membres
    	FROM matchs MA
    	INNER JOIN membres_matchs MM
    	   ON MA.id = MM.id_matchs
    	INNER JOIN membres MB
    	   ON MB.id = MM.id_membres
    	GROUP BY MM.id_matchs";
    $query_membres = $bdd->query( $sql ); // pas de données externes : on peut utiliser ->query()
    // ------------------
    // PREPARATION de la 2ème requête (en DEHORS du while, car on ne prépare qu'UNE FOIS !)
    	// requête des matchs pour CE membre
    	$sql_calcscore1 = "SELECT * 
    		FROM matchs MA
    		INNER JOIN membres_matchs MM
    		   ON MA.id = MM.id_matchs
    		INNER JOIN membres MB
    		   ON MB.id = MM.id_membres
    		WHERE MM.id_membres = :id_membre"; // pour CE membre
    	$query_calcscore1 = $bdd->prepare( $sql_calcscore1 ); // on prépare la requête (car on ne met jamais des données externes directement dedans)
    // ------------------
    // pour chaque membre
    while ($data = $query_membres->fetch() )
    {
    	$id_membre = $data['id_membres'];
    	// --------------
    	$query_calcscore1->execute( array( ':id_membre' => $id_membre) ); // on EXECUTE pour CE membre
    	// --------------
    	// ICI : tu recopies TOUT ton code (sauf la requête, remplacée par celle ci-dessus)
    	while ($scoredonnees = $query_calcscore1->fetch())
    	{
    		// ...
    		// ...
    		// ...
    	}
    	// --------------
    }	
    // ------------------

    N.B. Certains te diront qu'il ne faut pas faire de requête dans une boucle (while, foreach), et qu'on peut tout faire avec une seule requête.
    Ils n'ont pas tort. Mais ça complique l'écriture et surtout le traitement de la requête (et je n'ai pas trop envie d'y consacrer trop de mon temps...)
    Dernière modification par Invité ; 01/09/2018 à 11h16.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut RESOLU
    Bonjour,
    oui j'ai bien écrit ce code, mais je l'accorde c'est pas très propre.
    Je te remercie pour ton aide, j'ai, en modifiant la 1ere requête, réussi à composer ce que je souhaitais.

    Pour info, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    $sql = "SELECT DISTINCT id
      FROM membres";
    $query_membres = $bdd->query($sql); 
    // ------------------
      $sql_calcscore1 = "SELECT * 
        FROM matchs MA
        INNER JOIN membres_matchs MM
           ON MA.id = MM.id_matchs
        INNER JOIN membres MB
           ON MB.id = MM.id_membres
        WHERE MM.id_membres = :id_membre"; 
      $query_calcscore1 = $bdd->prepare($sql_calcscore1); 
    // ------------------
     
    while ($data = $query_membres->fetch() )
    {
      $id_membre = $data['id'];
      // --------------
      $query_calcscore1->execute( array( ':id_membre' => $id_membre) ); 
     
      $scorexacte1=0;
      $bonprono1=0;
      $bonscore1=0;
      $pronoparfait1=0;
      while ($scoredonnees1 = $query_calcscore1->fetch())
      {
     
    if ($scoredonnees1['home_score']==$scoredonnees1['homeprono'] AND $scoredonnees1['away_score']==$scoredonnees1['visiteprono'] AND $scoredonnees1['home_score']!='') {
      $pronoparfait1++;
      if ($scoredonnees1['home_score']>$scoredonnees1['away_score']) {
      $scorexacte1+=$scoredonnees1['cote_home']*2;
      }
      else if ($scoredonnees1['home_score']==$scoredonnees1['away_score']) {
      $scorexacte1+=$scoredonnees['cote_nul']*2;
      }
      else if ($scoredonnees1['home_score']<$scoredonnees1['away_score']) {
      $scorexacte1+=$scoredonnees1['cote_away']*2;
      }
    }
     
    else if ($scoredonnees1['home_score']<$scoredonnees1['away_score'] AND $scoredonnees1['homeprono']<$scoredonnees1['visiteprono'] ) {
      if ($scoredonnees1['home_score']<$scoredonnees1['away_score']) {
      $bonprono1+=$scoredonnees1['cote_away'];
      $bonscore1++;
      }
    }
     
    else if ($scoredonnees1['home_score']>$scoredonnees1['away_score'] AND $scoredonnees1['homeprono']>$scoredonnees1['visiteprono'] ) {
      if ($scoredonnees1['home_score']>$scoredonnees1['away_score']) {
      $bonprono1+=$scoredonnees1['cote_home'];
      $bonscore1++;
      }
    }
     
    else if ($scoredonnees1['home_score']==$scoredonnees1['away_score'] AND $scoredonnees1['homeprono']==$scoredonnees1['visiteprono'] AND $scoredonnees1['homeprono']!='' AND $scoredonnees1['visiteprono']!='') {
      if ($scoredonnees1['home_score']==$scoredonnees1['away_score']) {
      $bonprono1+=$scoredonnees1['cote_nul'];
      $bonscore1++;
      }
    }
     
     
    $totalpronoexact=$scorexacte1;
    $totalbonprono=$bonprono1;
    $totalpoints=$totalpronoexact+$totalbonprono;
     
    $bonprono=$bonscore1;
    $pronoparfait=$pronoparfait1;
     
    $validscoretot = $bdd->prepare("UPDATE membres SET 
      pronos_exacts=:pronoparfait, 
      bons_pronos=:bonprono, 
      points=:totalpoints
      WHERE id=:id_membres ");
    $validscoretot->execute(array(
      'pronoparfait'=> $pronoparfait,
      'bonprono'=> $bonprono,
      'totalpoints'=> $totalpoints,
      'id_membres'=> $id_membre,
    ));
      }
    }

  12. #12
    Invité
    Invité(e)
    Par défaut
    Pour bien faire (améliorer la performance), il faut AUSSI mettre la 3eme requête AVANT le 1er while :
    (lignes 71 et suivantes de ton code, à mettre ligne 15)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $validscoretot = $bdd->prepare("UPDATE membres SET 
      pronos_exacts=:pronoparfait, 
      bons_pronos=:bonprono, 
      points=:totalpoints
      WHERE id=:id_membres ");
    À retenir : La préparation d'une requête n'a besoin d'être effectuée qu'UNE SEULE FOIS.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Super merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Newsletter] pour plusieurs milliers de membres
    Par s2otony dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 11/09/2007, 01h49
  2. Réponses: 6
    Dernier message: 30/04/2007, 23h36
  3. Réponses: 6
    Dernier message: 06/04/2007, 11h16
  4. calcul à partir de plusieur champs et affichage du resultat dans un champ
    Par carmen256 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/05/2006, 11h47
  5. [VB.NET] plusieurs checkbox plusieurs events
    Par b_lob dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/05/2006, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo