Une primary key qui commence à 0001 et non 1

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une primary key qui commence à 0001 et non 1

par Hubert Roksor » 08 nov. 2006, 21:37

Généralement je n'aime pas trop l'idée de mélanger valeur numérique et représentation textuelle, mais je pense que ce que VaN cherche c'est l'option ZEROFILL de MySQL. Ça permet d'afficher "0001" mais d'utiliser "1" ou "0001" indifféremment dans les requêtes.

par Ajoloca » 08 nov. 2006, 20:25

Bonjour,

Si j'ai bien compris, tu voudrais que ce qui sort de ta base corresponde à un format qui est celui du nom de tes fichiers et ta colonne de référence est du type 'AUTO_INCREMENT'.

Une petite astuce consiste à utiliser les fonctions MySQL 'LPAD() ou RPAD()' qui te permet de compléter une valeur (numérique ou chaine) avec un caractère jusqu'à la logngueur voulue (elle retourne une chaine).
LPAD() remplie en ajoutant le caractère à gauche de la valeur
RPAD() idem, mais en remplissant à droite.
un exemple:

Code : Tout sélectionner

SELECT LPAD(1, 4, '0') nom_fichier; +-------------+ | nom_fichier | +-------------+ | 0001 | +-------------+ 1 row in set (0.00 sec)
Dans ton cas tu remplaces le '1' par le nom de ton champ(sans le apostrophes) et tu adaptes les autres paramètes avec la syntaxe

Code : Tout sélectionner

LPAD(nom_champ, longueur_totale, 'car_complete')
ATTENTION Si la longueur de la valeur du champ est supérieure elle sera tronquée al la longueur spécifiée en second paramètre

Code : Tout sélectionner

mysql> SELECT LPAD('Chaine plus longue', 4, '0') tronquee; +----------+ | tronquee | +----------+ | Chai | +----------+ 1 row in set (0.00 sec)
EDIT:
Et si dans une autre colonne tu as l'extension de ton fichier

Code : Tout sélectionner

mysql> SELECT CONCAT(LPAD(1, 4, '0'),'.jpg') nom_fichier; +-------------+ | nom_fichier | +-------------+ | 0001.jpg | +-------------+ 1 row in set (0.00 sec)
en remplaçant '.jpg' par le nom du champ (sans le apostrophes)

par Vikchill » 08 nov. 2006, 17:00

Si le format de la colonne est de type numérique, il sera classé par ordre croissant. Le classement que tu nous présentes est celui d'une chaîne de caractères, donc il doit y avoir de ta part une petite erreur de manipulation à un endroit.

Une primary key qui commence à 0001 et non 1

par VaN » 08 nov. 2006, 16:29

Bonjour,

tout est dans le sujet. Je travaille sur une table qui doit stocker des photos (enfin leur infos, les photos sont stockées sur le ftp), et qui dans le temps, va devoir stockerun gros nombre de lignes. Pour des questions de propreté, j'aimerais savoir si il est possible de faire commencer la première primary key à 0001 et non 1, car mes photos sur le ftp sont enregistrées en fonction de leur id, et j'aimerais qu'elles soient classées par ordre. En faisant commencer ma primary key à 1, au moment ou je vais atteindre la 10e photo, les photos apparaitront ainsi sur le ftp :

1.jpg
10.jpg
2.jpg
3.jpg
etc..

ce que je voudrais éviter.

Est ce possible de résoudre ce problème ?