Incrémentation champs VARCHAR MYSQL

Résolu
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Dans ma base, j'ai un champs num_indiv qui s'écrit avec un I majuscule en début de champs, suivi de chiffres. Le plus grand num_indiv à passer les 10000, soit + de I10000. (Dans ma base, j'ai aussi un champs ID en "auto-incrément".)

Si je veux créer un nouvel élément (via formulaire), je voudrais incrémenter le num_indiv.
J'ai écrit ceci:
$req=mysql_query("select max(num_indiv) from ville_bis");  
$res=mysql_result($req,0,"max(num_indiv)" );  // recup du max num_indiv  
$chaine = substr($res,1);   // on enlève le premier caract, soit "I" 
$toto = $chaine + 1;                  // toto = prochain num_indiv + I


Le problème, c'est que quand je cherche le num_indi maximum, j'ai comme résultat I9999, alors que je devrais avoir (par exemple) I10085.
Dans Mysql, le champs num_indiv est déclaré en VARCHAR, ce qui fait que pour lui, le plus grand est I9999.

Comment faire pour incrémenter ce champs après I9999 ?
Merci.

13 réponses

Anoen Messages postés 196 Date d'inscription   Statut Membre Dernière intervention   25
 
Et pourquoi mettre "I" si tu l'enlève après ? En INT ça passerait sans problème.
0
Autumn`Tears Messages postés 1054 Date d'inscription   Statut Membre Dernière intervention   145
 
Bonsoir,

Effectivement, le choix d'Anoen est sans doute le meilleur. Sinon tu devrais modifier ton champ VARCHAR avec une valeur plus grande, comme VARCHAR(10), et ça devrait aller pour un moment :

ALTER TABLE 'ville_bis' CHANGE 'num_indiv' 'num_indiv' VARCHAR( 10 )
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Autumn'Tears : j'avais essayé avec VARCHAR(10), mais le problème reste entier.

Et effectivement, j'avais pensé à la solution d'Anoen. Ce qui me permettrait d'incrémenter plus facilement le champs.
Par contre, je ne pourrais le mettre en INT avec auto-incrément, car j'ai repris une base existante, et le n° 1 dans ce champs n'existe pas, ou plus. Puis des relation de ce champs existe avec d'autres champs de la base, et je ne voudrais pas tout casser ....

Par contre, pour faire uine moulinette et enlever les "I" aux champs num_indiv, j'ai écrit :
$select = "SELECT * FROM ville_bis WHERE num_indiv='%I%'"; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result)) 
{
$chaine = substr($result,1);
$sql = "UPDATE ville_bis SET num_indiv = '$chaine' WHERE num_indiv = '%I%'";
}   

Mais ça marche pô !!!!!!
Vous pouvez m'aider ?
0
tito23 Messages postés 305 Date d'inscription   Statut Membre Dernière intervention   4
 
il faut utiliser SELECT num_indiv FROM ville_bis WHERE num_indiv= 'I%'
Bon courage.

--
Merci de changer le problème en résolu quand vous trouvez une solution
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
çà ne dois pas marcher car tu veux modifier un enregistrement mais ton where fais reference au meme enregestriment, du coup, il n'aime pas et ne modfie pas

quel est le mesage d'erreur que tu obtient ?
0
tito23 Messages postés 305 Date d'inscription   Statut Membre Dernière intervention   4
 
Pourquoi, c pa juste que vous dites, $sql = "UPDATE ville_bis SET num_indiv = '$chaine' WHERE num_indiv = '%I%'";
l'instruction est correcte
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Ca fonctionne pas, et je n'ai pas de message d'erreur :

$select = "SELECT * FROM ville_bis"; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result)) 
{
$chaine = substr($result,1);
$sql = "UPDATE ville_bis SET num_indiv = '$chaine' WHERE date_naissance = 'I%'";
}    
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
$chaine = substr($result,1);


çà sera mieux avec :

substr($row['....'],1);
0
tito23 Messages postés 305 Date d'inscription   Statut Membre Dernière intervention   4
 
oui comme a indiqué maka54 il faut utiliser $row['num_indiv']
0
tito23 Messages postés 305 Date d'inscription   Statut Membre Dernière intervention   4
 
et ajouter $result = mysql_query($sql,$link);
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Ben non, c'est pareil ..............
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
essaye cette requete pour tout modifier d'un coup

UPDATE ville_bis SET num_indiv = SUBSTR(num_indiv, 1) 
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
La solution de maka54 j'y ai cru ............. car c'est le résultat escompté !
Mais rien !!!! Même pas de message d'erreur ....... pffffffffff
0
maka54 Messages postés 698 Date d'inscription   Statut Membre Dernière intervention   80
 
fais ta requete direct dans la base, tu auras une message
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Effectivement, j'avais pas pensé à faire mes requêtes directes dans la base.
Là, avec ta requête, il me dit :
0 enregistrement(s) affecté(s).

Bizarre ..................

Voici un cham^ps num_indiv : I12
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai réussi :

UPDATE nom_de_ta_table SET nom_de_la_colonne = replace(nom_de_la_colonne, 'I', '');

Merci à tous !
A +
0