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

PHP & Base de données Discussion :

Sélection aléatoire et update [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut Sélection aléatoire et update
    Bonjour,voici ce que je désire réaliser.

    J'ai une table round(id_round int ,joueur1 int ,joueur2 int,resultat int) qui est censé représenter le déroulement d'un match d'échec.

    Je dois piocher au hasard deux joueurs dans la tablejoueur_licencie(id_joueur,id_club,numero_licence,nom_joueur,prenom_joueur,adresse_joueur,ville_joueur,elo,classment_championnat).

    En fait je sélectionne deux champs numero_licence(ils sont unique)ce qui me permet de différencier les joueurs entre eux.

    et je les insére dans ma table round dans les champs joueur1 et joueur2.

    Ensuite je génère un nombre aléatoire(0 1 ou 2) et je l'insère dans le champ résultat:

    0: match nul
    1: victoire joueur 1
    2: victoire joueur2

    Ainsi je modélise une rencontre et le résultat.

    Voici mon code il y a un problème au niveau de l'insertion des numéros de licence des joueurs.

    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
    <?php
     
    include("connection_base.php");
     
    $query_joueur1="SELECT numero_licence FROM joueur_licencie ORDER BY RAND( )LIMIT 1" ;
    $result_joueur1=mysql_query($query_joueur1) or die("Echec de la sélection du premier joueur");
    $query_joueur2="SELECT numero_licence FROM joueur_licencie WHERE numero_licence <> ".$joueur1."LIMIT 1";
    $result_joueur2=mysql_query($query_joueur2) or die ("Echec de la sélection du second joueur");
     
    $resultat=mt_rand(0,2);
     
    while(($insertion_joueur1=mysql_fetch_assoc($result_joueur1)) &&($insertion_joueur2=mysql_fetch_assoc($result_joueur2)))
    {
    	$query_insertion="INSERT INTO round(joueur1,joueur2,resultat) VALUES ('".$insertion_joueur1['numero_licence']."','".$insertion_joueur2['numero_licence']."','".$_resultat."');"
    	$result_insertion=mysql_query($query_insertion) or die("Echec de l'insertion des paramètres du round");
    }
    switch($resultat)
    {
    	case 0:
    	echo'Les deux joueurs ont fait match nul';
    	$nul_joueur1="UPDATE joueur_licencie SET classement_championnat=(classement_championnat+0,5) WHERE numero_licence='".$_joueur1."''";
    	$result_nul_joueur1=mysql_query($nul_joueur1);
    	$nul_joueur2="UPDATE joueur_licencie SET classement_championnat=(classement_championnat+0,5) WHERE numero_licence='".$_joueur2."''";
    	$result_nul_joueur2=mysql_query($nul_joueur2);
    	break;
     
    	case 1:
    	echo'Le joueur 1 a remporté la partie';
    	$victoire_joueur1="UPDATE joueur SET classement_championnat=classement_championnat+0,5 WHERE numero_licence='".$_joueur1."''";
    	mysql_query($victoire_joueur1);
    	break;
     
    	case 2:
    	echo'Le joueur 2 a remporté la partie';
    	$victoire_joueur2="UPDATE joueur SET classement_championnat=classement_championnat+0,5 WHERE numero_licence='".$_joueur2."''";
    	mysql_query($victoire_joueur2);
    	break;
     
    	default:
    	break;
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi tu ne fais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT numero_licence FROM joueur_licencie ORDER BY RAND( )LIMIT 2
    ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    Exact ^^.

    Jvais tester !

    Mais comment utiliser les 2 numéros par la suite ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query_joueurs="SELECT numero_licence FROM joueur_licencie ORDER BY RAND( )LIMIT 2" ;
    $result_joueurs=mysql_query($query_joueur1) or die("Echec de la sélection des joueurs");
    while(($insertion_joueurs=mysql_fetch_assoc($result_joueurs)))
    {
    ......
    }
    J'utilise $insertion_joueur[0] et $insertion_joueurs[1]?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    Voilà ce que j'ai fait.Il y a une erreur.

    Je pense que ça vient de l'utilisation de résultat du select dans la requête d'insertion !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ".$insertion_joueurs[0].",".$insertion_joueurs[1]."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    include("connection_base.php");
     
    $query_joueurs="SELECT numero_licence FROM joueur_licencie ORDER BY RAND( )LIMIT 2" ;
    $result_joueurs=mysql_query($query_joueur1) or die("Echec de la sélection des joueurs");
     
    $resultat=mt_rand(0,2);
     
    while(($insertion_joueurs=mysql_fetch_assoc($result_joueurs)))
    {
    	$query_insertion="INSERT INTO round(joueur1,joueur2,resultat) VALUES (".$insertion_joueurs[0].",".$insertion_joueurs[1].",".$_resultat.");"
    	$result_insertion=mysql_query($query_insertion) or die("Echec de l'insertion des paramètres du round");
    }

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Je ne vois pas pourquoi tu utilise la fonction ROUND() de MySQL pour l'insertion des 2 joueurs.
    round() c'est pour arrondir un nombre décimal.
    Sauf erreur, ll me semble pas qu'il soit permis de faire un ROUND() après un INSERT INTO, ça n'a pas de sens.

    Faudrait voir la structure de cette table (qui n'a pas de nom d'ailleurs) pour les résultats, mais à priori ça devrait être simple.
    Par contre, il ne faut pas faire l'insertion dans la boucle car la boucle te retourne 1 seul joueur par boucle, alors qu'il te faut les 2 pour l'insertion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(($insertion_joueurs = mysql_fetch_assoc($result_joueurs))) {
    	$joueurs[] = $insertion_joueurs['numero_licence'];
    }
    //
    $query_insertion = "INSERT INTO rencontre (joueur1, joueur2, resultat) VALUES (".(int)$joueurs[0].", ".(int)$joueurs[1].", ".(int)$_resultat.")";
    (le ; à la fin était mal placé aussi)
    Je parts du principe aussi que le "numero_licence" est un nombre numérique (un entier). Si ce n'est pas le cas, faut enlever les (int) et rajouter des quote -> '' entre les valeurs.

    Modifie aussi ceci : ... RAND( )LIMIT...
    par : ... RAND() LIMIT ...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Par défaut
    Ben justement sa table s'appelle round... c'est sûr que ça va pas aller, c'est un mot-clé MySQL (à moins de l'escaper tout le temps). Renomme ça en "rounds" par exemple, il est de bonne pratique de mettre les noms de tables au pluriel.

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

Discussions similaires

  1. [AC-2003] sous Requete sélection aléatoire dans requete update. Problème de syntaxe
    Par Chagui dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/04/2011, 10h58
  2. [MySQL] Aide requête MySQL : sélection aléatoire d'un enregistrement avec critère
    Par iwf-fr dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/05/2007, 09h01
  3. requete de sélection aléatoire distincte
    Par calitom dans le forum Langage SQL
    Réponses: 9
    Dernier message: 21/12/2006, 17h59
  4. [MySQL] Sélection aléatoire sans doublon
    Par krapoulos2006 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/12/2006, 16h46
  5. Sélection aléatoire d'une seule ligne.
    Par Pat bol 002 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/01/2005, 19h30

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