Auto-incrémenter un champ avec syntaxe prédéfinie

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

J'ai une petite question concernant des enregistrements en base de données. J'ai par exemple une table 'clients' et dedans j'ai un champs "id" en auto-increment ainsi qu'un champ "code_client".

Au moment de l'enregistrement d'un nouveau j'aimerais faire en sorte que le code_client soit automatique mais sous la forme "E000001" par exemple. Et bien sur à chaque nouveau client il doit s'auto-incrémenter. Comment dois-je m'y prendre ?

J'avais déjà fait ce genre de chose mais je crois que c'est pas le mieux. J'enregistrais mon client et ensuite avec le "last_insert_id" je faisais un update derrière. Enfin un truc que je trouve vraiment pas chouette…

Quelqu'un aurait une astuce ?

Merci d'avance :)

PS : Pour précision je suis sous CodeIgniter

Merci de ta réponse, j'ai fait une petite recherche sur les triggers que je ne connaissais absolument et effectivement cela à l'air très pratique.

Par contre je ne comprends pas la fin de ta phrase : "couplé à une séquence". Qu'entends-tu pas ce bout de phrase ?

Encore merci ;)

Un trigger est un code (que tu rédige) qui va s'insérer sur des élèvements. C'est donc dans le code du trigger que tu vas générer le code du client.

Mais pour avoir la partie incrémentale du code, on utilise une séquence. Et à chaque création de client on demande à la séquence "dis moi quelle est ta prochaine valeur ?". Elle te retourne sa prochaine valeur et s'incrémente pour être prête pour un prochain appel.

+1 -0

J'ai réussi ce que je cherchais à faire, du coup pour les éventuelles personnes qui chercheraient à faire la même chose, voici mon bout de code.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
DELIMITER |
CREATE TRIGGER before_insert_contacts BEFORE INSERT
ON crm_contacts FOR EACH ROW
BEGIN
    DECLARE max_code INT;

    SET max_code = (SELECT MAX(id) +1 FROM `crm_contacts`);
    IF (max_code IS NULL) THEN
        SET max_code = 1;
    END IF;

    SET NEW.code_client = CONCAT('C', LPAD(max_code, 6,'0'));
END

Pour expliquer vite fait, je créé un trigger avant l'insertion des données sur ma table "contacts". Ensuite pour chaque enregistrements, je sélectionne l'id le plus haut et je lui rajoute 1. Si jamais mon id est null dans ce cas mon id = 1.

Pour finir j'ajoute mon code_client en base de données en concaténant la lettre "C" avec mon nouvel id. La fonction LPAD permet de rajouter des zéro devant le chiffre (ici j'en rajoute 5).

Merci elyppire pour ton aide, je ne connaissais pas les triggers et c'est assez intéressant ça me serviras surement autre part.

EDIT : Je comprends pas pourquoi mon code ne s'affiche pas correctement :(

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte