Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2006, 17h40   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2004
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 19
Points : 10
Points : 10
Par défaut INSERT, fonction MAX, et auto_increment

hello,

je dois realiser une sorte de loterie avec tickets. Les numeros de ticket sont reprentés par l'id auto-incrementé de la table (id_ticket). Mon probleme est le suivant :

Lorsqu'un joueur prend un ou des tickets je fais la requete suivante où XXX represente le nombre de tickets pris par le joueur:
Code :
1
2
 
INSERT INTO `ipod` (`id_ticket`, `login`, `date`, `heure`, `ip_visit`, `code`, `id_jeux`, `valid`, `valid_pass`) SELECT MAX(id_ticket)+XXX, 'aaaaaa', '0000-00-00', '00:00:00', 'sdfsd', 'fsdf', 'sdfsd', '', '' FROM ipod
Si plusieurs utilisateurs prennent un ticket au meme moment, ne risque-t- il pas d'y avoir un probleme avec le MAX(id_ticket)+XXX. Je m'explique, si cette requete est executée par plusieurs joueur en meme temps, MAX(id_ticket)+XXX ne risque-t-il pas de remonter la meme valeur à ces requetes? et donc entrainer un probleme d'id_ticket "non unique" ?

Le but du jeu pour moi etant de limiter le nombre de requetes. Au lieu de faire, par exemple, 20 insert pour 20 ticket je veux faire un seul insert en incrementant de 20 la valeur d'id_ticket en etant sur de bien incrementer id_ticket avant qu'une autre execusion de la requete ne se lance. Tout ca pour eviter un "melange" de requetes.

exemple :

id_ticket login
1 joueur1
2 joueur2
3 joueur3

le joueur4 prends 20 tickets et le joueur5 10 ticket, je veux avoir :

id_ticket login
1 joueur1
2 joueur2
3 joueur3
23 joueur4
33 joueur5


et je veux eviter d'avoir :

id_ticket login
1 joueur1
2 joueur2
3 joueur3
23 joueur4
13 joueur5



voir meme si les deux en prenent 20

id_ticket login
1 joueur1
2 joueur2
3 joueur3
23 joueur4
23 joueur5

Je rame un peu pour trouver une solution
Si vous avez une idée je suis preneur ....

merci
freesurfer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 18h18   #2
Membre régulier
 
Avatar de vincedom
 
Inscription : mars 2006
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 87
Points : 98
Points : 98
Envoyer un message via MSN à vincedom Envoyer un message via Skype™ à vincedom
Salut


Deja mis a part si tu pense avoir des joueurs qui prennent vraiment plein de tickets pourquoi ne pas inserer un id par ticket et declarer id comme cle ou comme unique... Ca parait assez simple ??

Sinon tu peux toujours jeter un coup d'oeil du cote de lock table

Citation:
lock tables account write;
select balance from account where number = 2;
update account set balance = 1500 where number = 2;
unlock tables;

A call to LOCK TABLES tries to lock any tables you list so that the current thread can work with it without interference. A call to UNLOCK TABLES releases any locks that this thread holds. Unlocking is straightforward. The only thing to note about it is that if you have locked a table, you should unlock it as soon as possible to limit the impact on other threads. Locking is a more complicated issue.
http://dev.mysql.com/books/mysqlpress/mysql-tutorial/ch10.html
vincedom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2006, 18h29   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2004
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 19
Points : 10
Points : 10
Pour l'instant c'est ce que je fait, un id par ticket.
Mais je veux juste eviter qu'il y ait trop de requetes ... si 50 joueurs prenent 20 tickets chacuns je me retrouve avec 1000 requetes en meme temps sur la meme table... et ca va arriver vu la configuration du jeu.
Je vais voir du coté du LOCK, merci
freesurfer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h04.


 
 
 
 
Partenaires

Hébergement Web