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

SQL Procédural MySQL Discussion :

INSERT, fonction MAX, et auto_increment


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    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

    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

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Par défaut
    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

Discussions similaires

  1. Optimisation fonction MAX
    Par AurelGTS dans le forum Langage SQL
    Réponses: 7
    Dernier message: 14/05/2007, 19h26
  2. [SQL Server 8] fonction Max --- selon des conditions
    Par Baquardie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 21h06
  3. fonction MAX
    Par javaSudOuest dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2005, 18h12
  4. Fonction MAX dans une condition WHERE
    Par borgfabr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 16h06
  5. Fonction max d'un tableau de variables...
    Par Romalafrite dans le forum ASP
    Réponses: 7
    Dernier message: 20/07/2004, 10h38

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