IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Ajouter 1 à chaque ligne d'un champ.


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    bibliothécaire
    Inscrit en
    Septembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bibliothécaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2012
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Ajouter 1 à chaque ligne d'un champ.
    Bonjour.

    Dans ma table empr la colonne empr_cb est de type vachar(255) et contient les numéros de codes barres des lecteurs de notre bibliothèque. La numérotation va de 003 à 532 alors que nous n'avons que 80 lecteurs. Nous en avons "supprimé" pas mal. J'aimerais renuméroter tout ça à partir de 001 et que 1 soit ajouté à chaque nouvelle ligne jusqu'au dernier lecteur.

    Merci de votre aide.

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    si on code est purement numérique (code bar) tu devrais avoir une colonne numérique...
    je sais que certains adorent brandir la sémantique d'un code sur lequel on ne fait à priori pas de calcul (c'est pas toujours vrai) pour justifier qu'un code doit être du texte (varchar ou varbinary) mais moi je dis qu'il faut être plus pragmatique
    quand une valeur est purement numérique autan la stocker au format numérique:
    • tu optimises les opérations de recherche
    • tu permets des traitements numériques dessus si besoin...


    ensuite tu utilises une table temporaire dans la quel tu stockes les identifiants de tes lecteurs ordonnés de manière croissante et tu récupère la colonne auto incrémentée équivalente pour la stocker à la place de la valeur originale dans toutes les tables concernées

    si tu veux rester en colonne texte tu peux utiliser les fonctions de traitements sur les chaines pour engendre une conversion implicite genre lpad (pour combler une valeur par la gauche avec des caractères)
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Membre à l'essai
    Homme Profil pro
    bibliothécaire
    Inscrit en
    Septembre 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bibliothécaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2012
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Bonjour.

    Cette base de données est celle du logiciel de gestion de bibliothèque PMB. Par défaut la colonne empr_cb est en VACHAR. Je n'envisage donc pas de changer son type. Je ne rentre pas dans le détail mais cela présente des avantages pratiques lors, par exemple, de l'exportation dans un tableur pour l'édition de listes ou de cartes lecteurs.

    Au demeurant modifier 80 lignes à la main me prendrait sûrement moins de temps que d'écrire une requête mais c'est moins intéressant.

    Est-ce que je peux conclure que si je reste en VACHAR je ne peux pas faire ce que je voulais ?

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    je t'ai dit que tu peux le faire aussi

    l'idée est de créer une table temporaire en mémoire:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create temporary table tmp(
      id tinyint unsigned auto_increment,
      val varchar(255)
    )engine=memory auto_increment=1;

    ensuite tu listes tes valeurs dedans:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into tmp(val)
    select empr_cb
    from empr
    order by empr_cb asc

    tu as plus qu'à faire autan d'update que tu as de tables (des copies, on sait jamais) à modifier
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update empr e
    left join tmp t on t.id=e.empr_cb
    set e.empr_cb=t.lpad(t.val,3,'0')

    une autre approche pour modifier la copie, dont tu as créé la structure juste avant, directement:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert  into copie(....)#listes les colonnes dans la table copie
    select ...,t.val,...#on remplace la référence à empr_cb
    from origine o
    left join tmp t on t on t.id=o.empr_cb
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Calcul d'écart de valeur entre chaque ligne d'un champ d'une requête
    Par Ahlmael dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/12/2014, 11h54
  2. lien pour chaque ligne d'un champ
    Par info_sara dans le forum Dreamweaver
    Réponses: 7
    Dernier message: 28/05/2008, 14h50
  3. [MySQL] lien pour chaque ligne d'un champ
    Par info_sara dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/05/2008, 00h42
  4. Réponses: 3
    Dernier message: 15/09/2006, 18h20
  5. ajouter un echo à chaque ligne
    Par pharaonline dans le forum Langage
    Réponses: 18
    Dernier message: 30/05/2006, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo