Incrémentation champs VARCHAR MYSQL

Résolu/Fermé
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - Modifié par t671 le 8/12/2011 à 19:05
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 9 déc. 2011 à 13:10
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 mardi 10 novembre 2009 Statut Membre Dernière intervention 11 septembre 2013 25
8 déc. 2011 à 23:29
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 samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 144
9 déc. 2011 à 00:15
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
9 déc. 2011 à 11:03
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 mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
Modifié par tito23 le 9/12/2011 à 11:24
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 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
9 déc. 2011 à 11:31
çà 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 mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
9 déc. 2011 à 12:09
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
9 déc. 2011 à 11:38
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 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
9 déc. 2011 à 12:00
$chaine = substr($result,1);


çà sera mieux avec :

substr($row['....'],1);
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
9 déc. 2011 à 12:05
oui comme a indiqué maka54 il faut utiliser $row['num_indiv']
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
9 déc. 2011 à 12:12
et ajouter $result = mysql_query($sql,$link);
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
Modifié par t671 le 9/12/2011 à 12:07
Ben non, c'est pareil ..............
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
9 déc. 2011 à 12:09
essaye cette requete pour tout modifier d'un coup

UPDATE ville_bis SET num_indiv = SUBSTR(num_indiv, 1) 
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
9 déc. 2011 à 12:19
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 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
9 déc. 2011 à 12:22
fais ta requete direct dans la base, tu auras une message
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
9 déc. 2011 à 12:33
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
9 déc. 2011 à 13:10
J'ai réussi :

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

Merci à tous !
A +
0