Incrémentation champs VARCHAR MYSQL
Résolu
t671
Messages postés
1478
Date d'inscription
Statut
Membre
Dernière intervention
-
t671 Messages postés 1478 Date d'inscription Statut Membre Dernière intervention -
t671 Messages postés 1478 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:
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.
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
-
Et pourquoi mettre "I" si tu l'enlève après ? En INT ça passerait sans problème.
-
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 )
-
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 ? -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
çà 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 ? -
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%'"; } -
$chaine = substr($result,1);
çà sera mieux avec :
substr($row['....'],1);
-
Ben non, c'est pareil ..............
-
essaye cette requete pour tout modifier d'un coup
UPDATE ville_bis SET num_indiv = SUBSTR(num_indiv, 1)
-
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 -
fais ta requete direct dans la base, tu auras une message
-
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 -
J'ai réussi :
UPDATE nom_de_ta_table SET nom_de_la_colonne = replace(nom_de_la_colonne, 'I', '');
Merci à tous !
A +