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

Outils MySQL Discussion :

incrémenter un champ mysql


Sujet :

Outils MySQL

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut incrémenter un champ mysql
    Bonjour,

    J'ai réalisé un outil de sondage en php et je dois enregistrer la réponse de la personne dans la base et pour celà j'incrémente un compteur pour savoir combien de votes pour une réponse. Mon problème c'est si au moment de faire mon update la ligne n'existe pas encore çà va merder.
    Et si je fais un select avant pour vérifier si la ligne existe c'est pas top car entre le select et l'update la ligne peut etre créer entre temps.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    utilise un INSERT... ON DUPLICATE KEY UPDATE. Cf http://www.developpez.net/forums/sho...d.php?t=267812
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    J'ai un problème de syntaxe j'ai fait un phpinfo et j'ai vu que j'ai la version 4.0 de mysql et il faut la 4.1 pour utiliser ON DUPLICATE KEY enfin je crois.
    Comment je peux faire ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je vois une astuce en utilisant une table d'une seule ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE mono (Num INT) ;
    INSERT INTO mono VALUES (1) ;
    Cela te permet de faire une jointure externe qui génère un NULL là ou il n'y a pas encore de réponse ; un COALESCE te suffit pour transformer ce NULL en zéro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    REPLACE INTO reponses (idReponse, nbvotes)
    SELECT $id, COALESCE(NbVotes, 0) + 1
    FROM Mono
      LEFT JOIN Reponses R ON R.IDreponse = $id
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. [PHP 5.2] function qui incrémente un champs mysql
    Par remrem59 dans le forum Langage
    Réponses: 5
    Dernier message: 05/11/2009, 12h35
  2. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  3. problème de timestamp dans champ MySQL
    Par Torpedox dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 04/12/2005, 09h59
  4. Incrémenter un champ
    Par Cyrius dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 01/11/2005, 21h17
  5. Réponses: 3
    Dernier message: 13/12/2004, 14h14

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