Merci de m'aider
Je ne sais pas si ma requête fonctionne sur phpMyAdmin ou en ligne de commande, car je ne sais tout simplement pas faire ce genre d'action
Pour la structure, un peu d'explications :
En fait, je fait un jeu, ici le point concerner, concerne des mises, que les joueurs font sur un pari.
Lors du premier pari, je fait un INSERT, mais si le joueur souhaite encore miser, je fait un update.
Voici comment ce compose ma table :
Table : mise
Champ- Type Interclassement Attributs Null Défaut Extra
id int(11) Non Aucun auto_increment
pseudo tiny text latin1_swedish_ci Non Aucun
mise bigint(20) UNSIGNED Non Aucun
gagnant tinytext latin1_swedish_ci Non Aucun
idpari bigint(20) UNSIGNED Non Aucun
Voici comment je m'en sert :
J'affiche les paris dont les valeurs, sont dans la table pari
J'ai un formulaire, qui reprend l'id unique du combat(idpari), la mise(mise), et sur qui on pari(gagnant).
Ensuite, j'entre les infos dans la table mise
id->Auto-increment (je ne fait rien)
pseudo ->Le pseudo du joueur qui pari
mise->la mise jouer ( qui s'additionne si le joueur souhaites augmenter sa mise)
gagnant->le pseudo de celui que l'on souhaites voir gagner
idpari ->l'id du pari (qui me permet, une fois que l'affrontement a eu lieu, de récupérer le vainqueur et de distribuer les gains)
Les champs id, pseudo, gagnant et id pari lors d'un UPDATE reste statique, je ne touche qu'a la mise.
Voila
EDIT : Bon y a de l'avancement, sa fonctionne mais pas comme je le souhaiterais.
J'ai du mettre les champs pseudo, gagnant, idpari en index unique sur la base de données.
Il m'enregistre bien tout, insert comme update.
Mais si je souhaites par exemple parier sur le même combat, avec un gagnant différent, voici ce qui se passe :
CODE 1
$pseudo='francis';
$mise=1000;
$gagnant='robert';
//$gagnant='roger';
$idpari=1;
$test=$bdd->prepare('INSERT INTO mise (pseudo, mise, gagnant, idpari) VALUES (:pseudo, :mise, :gagnant, :idpari)
ON DUPLICATE KEY UPDATE pseudo=:pseudo, mise=mise+ :mise, gagnant= :gagnant, idpari= :idpari');
$test->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$test->bindValue(':mise', $mise, PDO::PARAM_INT);
$test->bindValue(':gagnant', $gagnant, PDO::PARAM_STR);
$test->bindValue(':idpari', $idpari, PDO::PARAM_INT);
$test->execute();
$test->closeCursor();
Dans le code ci-dessus -> Si ensuite je mise sur Roger, je n'es pas de nouvelle entrée, la mise s'additionne, et le gagnant n'est plus Robert, mais Roger.
Avec ce code :
$test=$bdd->prepare('INSERT INTO mise (pseudo, mise, gagnant, idpari) VALUES (:pseudo, :mise, :gagnant, :idpari)
ON DUPLICATE KEY UPDATE mise=mise+ :mise');
$test->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$test->bindValue(':mise', $mise, PDO::PARAM_INT);
$test->bindValue(':gagnant', $gagnant, PDO::PARAM_STR);
$test->bindValue(':idpari', $idpari, PDO::PARAM_INT);
$test->execute();
$test->closeCursor();
Pas de nouvelle entrée, mais j'ai un update sur la mise.
Si sa fonctionne en unique, je ne penses pas que je puisse utiliser DUPLICATE KEY UPDATE, a moins de faire une configuration différente des champs unique.