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 :

Ajouter une valeur à un identifiant par rapport au dernier [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Ajouter une valeur à un identifiant par rapport au dernier
    Salut tout le monde,

    J'insère une nouvelle ligne dans ma table avec des valeurs vides.

    Je récupère l'ID le plus important.

    Et j'aimerais faire un update de la nouvelle ligne en affectant le dernier ID + 1 à l'ID de la nouvelle ligne.

    J'ai ce code qui ne fonctionne bien sûr pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = "INSERT INTO ".$_SESSION['LaTable']." VALUES ()"; 
    $execution=mysql_query($sql, $link)or die($query . " - " . mysql_error());
     
    //Je prends la valeur du dernier ID 
    $sql = 'SELECT ID FROM '. $_SESSION['LaTable']. ' ORDER BY ID DESC LIMIT 0,1';
    $execution=mysql_query($sql, $link)or die($query . " - " . mysql_error());
     
    $IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET ID VALUES ('.$sql+1.') WHERE ID = ""' ; 
    $execution=mysql_query($IncrementationID, $link)or die($query . " - " . mysql_error());
    Je ne peux PAS utiliser l'auto-incrémentation car ce n'est PAS une clé primaire.

    Sauriez-vous m'aider svp ?

    Merci d'avance.

    beegees

  2. #2
    Membre éprouvé Avatar de Grepsd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 96
    Par défaut
    Déjà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Je prends la valeur du dernier ID 
    $sql = 'SELECT ID FROM '. $_SESSION['LaTable']. ' ORDER BY ID DESC LIMIT 0,1';
    $execution=mysql_query($sql, $link)or die($query . " - " . mysql_error());
     
    $IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET ID VALUES ('.$sql+1.') WHERE ID = ""' ;
    La variable $sql contient ta précédente requête et non pas la valeur de l'ID voulue.

    et tu n'as pas besoin de faire autant de requêtes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT ID+1 FROM '. $_SESSION['LaTable']. ' ORDER BY ID DESC)'
    Et encore mieu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'INSERT INTO table(ID,....) VALUES(SELECT max(ID)+1 FROM table,...)'
    Là tu insert directement une nouvelle ligne avec une ID égale à la plus grande ID plus 1.


    De plus ton code est difficilement lisible :/
    et essayes d'utiliser MySQLi ou PDO pour tout ce qui concerne MySQL si possible pour des raisons de protections contre les injections et par ce que mysql_*() sera bientôt déprécie ^^"

    De plus, essais de protéger par des `` les champs ayant des noms très utilisés en programmation (ID l'est énormément.)

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    J'obtiens ce message d'erreur :

    - You can't specify target table 'cours' for update in FROM clause
    Avec ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT ID+1 FROM '. $_SESSION['LaTable']. ' ORDER BY ID DESC)'; 
    $execution=mysql_query($IncrementationID, $link)or die($query . " - " . mysql_error());
    Qu'en penses-tu ?

    Encore merci.

    beegees

  4. #4
    Membre éprouvé Avatar de Grepsd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2008
    Messages : 96
    Par défaut
    et essayes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT max(ID)+1)';
    je ne sais plus si cette syntaxe est correct mais il me semble que oui.


    [edit]

    J'avoue ne pas avoir la solution sous la main, je regarderais ça de façon plus approfondie dans la soirée ou d'ici demain. Si quelqu'un n'a pas répondu d'ici là bien entendu :p

    [/edit]

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Re,

    Merci pour ton aide.

    On dirait qu'il prend toujours comme ID 1 car j'obtiens ce message:

    - Duplicate entry '' for key 1
    j'utilise donc ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT max(ID)+1)';
    $execution=mysql_query($IncrementationID, $link)or die($query . " - " . mysql_error());
    Edit : le problème est qu'il ajoute un enregistrement avant le dernier.

    Il met ensuite à jour l'id du dernier enregistrement, donc l'ID 3 devient 4 et il ajoute une nouvelle linge qui porte l'ID 1 qui existe déjà.

    Qu'en penses-tu ?

    Encore merci.

    beegees

  6. #6
    Membre Expert
    Avatar de Jumano
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 1 163
    Par défaut
    Bonjour,
    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = "INSERT INTO ".$_SESSION['LaTable']." VALUES ()"; 
    $execution=mysql_query($sql, $link)or die($query . " - " . mysql_error());
     
    $query_IDmax = "SELECT ID FROM ".$_SESSION['LaTable']." ORDER BY ID DESC LIMIT 1";
    $IDmax = mysql_query($query_IDmax, $link) or die(mysql_error());
    $row_IDmax = mysql_fetch_assoc($IDmax);
    $max = ($row_IDmax['ID']+1);
     
    $IncrementationID = "UPDATE ".$_SESSION['LaTable']." SET ID = '".$max."' WHERE ID = '0'";
    $execution=mysql_query($IncrementationID, $link)or die($query . " - " . mysql_error());

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

Discussions similaires

  1. Ajouter une valeur par défaut à un champ
    Par mougeole dans le forum Doctrine2
    Réponses: 3
    Dernier message: 19/05/2017, 15h40
  2. Réponses: 5
    Dernier message: 09/10/2013, 00h05
  3. Réponses: 4
    Dernier message: 14/05/2009, 14h15
  4. Ajouter une valeur par defaut à un champ
    Par smooncef dans le forum Informix
    Réponses: 9
    Dernier message: 15/04/2008, 13h40
  5. Réponses: 5
    Dernier message: 25/06/2007, 11h01

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