Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/12/2012, 17h15   #1
laguespa
Candidat au titre de Membre du Club
 
Homme
bibliothécaire
Inscription : 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 : 10
Points : 10
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.
laguespa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 13h01   #2
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 804
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 804
Points : 3 099
Points : 3 099
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...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 16h52   #3
laguespa
Candidat au titre de Membre du Club
 
Homme
bibliothécaire
Inscription : 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 : 10
Points : 10
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 ?
laguespa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2012, 17h31   #4
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 804
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 804
Points : 3 099
Points : 3 099
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 :
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 :
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 :
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 :
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...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h55.


 
 
 
 
Partenaires

Hébergement Web