8791 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

J'aimerais ajouter un enregistrement dans une table et y mettre une valeur par défaut dans son champ "ID".

Cette valeur défaut serait le nombre se trouvant dans l'ID précédent + 1.

Attention : ID n'est pas un auto incrément car c'est un champ qui n'est pas une clé primaire.

Voici ce que j'ai fait :

J'ajoute donc une ligne à ma table :

$sql = "INSERT INTO ".$_SESSION['LaTable']." VALUES ()"; 
$execution=mysql_query($sql, $link)or die($query . " - " . mysql_error());


Je mets dans ID le dernier numéro +1 :

$IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT max(ID)+1)';
$execution=mysql_query($IncrementationID, $link)or die($query . " - " . mysql_error());


Le problème est qu'il incrémente l'ID de l'enregistrement déjà présent et (je pense) incrémente aussi le nouvel enregistrement en le faisant passer de 0 à 1.

avec le premier ça fonctionne, on passe de 0 à 1 et de (par exemple) 22 à 23 (ça il ne devrait pas le faire) et ensuite lorsque j'ajoute un nouvel enregistrement il affecte la valeur 1 au nouvel ID, le 1 existe déjà, j'obtiens alors un message d'erreur :

Duplicate entry (ou quelque chose dans le genre).

Un tout grand et sincère merci pour votre aide.

beegees
beegees a écrit :

$IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT max(ID)+1)';
Je suis surpris que ça ne plante pas à l'exécution mais en tout cas il faudrait plutôt faire
id = (SELECT max(ID) from '.$_SESSION['LaTable'].') +1
Bonjour Heyoan,

Merci beaucoup pour ta réponse et ton code.

Je présume que je dois ajouter ensuite l'ID généré par ton code dans l'update ou l'INSERT INTO ?

Encore merci à toi pour ton dévouement.

beegees
beegees a écrit :


Je présume que je dois ajouter ensuite l'ID généré par ton code dans l'update ou l'INSERT INTO ?
Non, non : tu peux le faire en une seule fois (il me semble qu'il faut quand même PHP5 pour imbriquer les requêtes) :
$IncrementationID = 'INSERT INTO '.$_SESSION['LaTable'].' SET id = (SELECT max(ID) from '.$_SESSION['LaTable'].') +1';


Edit: : petite erreur entre Update et Insert
Modifié par Heyoan (10 Nov 2008 - 17:17)
Re,

ça marche pas Smiley decu

$IncrementationID = 'UPDATE '.$_SESSION['LaTable'].' SET id = (SELECT max(ID) from '.$_SESSION['LaTable'].') +1';
mysql_query($IncrementationID,$link);


où c'est encore moi qui a du faire une erreur quelque part ?

Merci encore.

beegees
Oups ! Désolé c'est moi : ça ne marche pas en ne faisant qu'une requête. Il faut donc faire ça en 2 fois.
Heyoan a écrit :
Oups ! Désolé c'est moi : ça ne marche pas en ne faisant qu'une requête. Il faut donc faire ça en 2 fois.


Re,

Et bien, ça ne fonctionne toujours pas, pas de message d'erreur mais aucun résultat ?

Pas très grave en même temps, je vais réfléchir comment je peux contourner ce problème.

Merci encore.

beegees
Et quelque chose comme ça :
$id_max = mysql_result(mysql_query('Select max(id) from '.$_SESSION['LaTable']), 0);
$sql = 'insert into '.$_SESSION['LaTable'].' set id = '.$id_max.' + 1';
mysql_query($sql) or die(mysql_error());