Extraire table mysql pour copier avec modif dans une autre

Extraire table mysql pour copier avec modif dans une autre - SQL/NoSQL - Programmation

Marsh Posté le 12-12-2012 à 17:56:21    

Bonjour à tous,
 
J'ai une table mis dans le format suivant:
ENSEMBLE, Elément, Bt1, Bt2, Bt3....., Bt300
 
Bt1 à Bt300 sont des bâtiments (mais il n'y en a pas 300 mais environ 100 c'est juste leurs noms), chaque colonne bâtiment contient le nombre d'élément. Ce qui donne par exemple ceci
http://dl.dropbox.com/u/31901874/exemple1.jpg  
 
Je voudrais copier cette table et l'insérer dans une autre (inventaire) qui est dans le format suivant:
type_ensemble, element, nom_batiment, nombre
 
Soit ceci:
http://dl.dropbox.com/u/31901874/exemple2.jpg
 
Est-ce que quelqu'un sait comment est-ce que je peux faire?
 
Si oui comment?
 
Merci d'avance
 
Maxredphenix


Message édité par maxredphenix le 12-12-2012 à 18:37:28
Reply

Marsh Posté le 12-12-2012 à 17:56:21   

Reply

Marsh Posté le 12-12-2012 à 20:35:21    

Je sais pas ce que dit la théorie sur le sujet mais ça se bricole assez bien.
Tu génères un fichier avec 300 commandes :

Code :
  1. select ENSEMBLE ||';'|| Elément ||';'|| 'BT1' ||';'|| BT1 from la_table
  2. ...
  3. ...
  4. select ENSEMBLE ||';'|| Elément ||';'|| 'BT300' ||';'|| BT300 from la_table


Ca se fait bien avec la fonction CONCATENER() d'Excel :D  
 
Tu exécute ce fichier en redirigeant le résultat et tu as un joli fichier .csv à recharger dans la nouvelle base :)
(Faut éviter tout ce qui est présentation, entêtes de colonne ...)


Message édité par mrbebert le 12-12-2012 à 20:40:14

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 12-12-2012 à 20:56:03    

Bonsoir et merci de la réponse,
 
Il n'y a pas un moyen plus rapide de faire cela et en une seule fois? Il devrait il y a avoir une possibilité de une sorte d'ALTER TABLE non?
 
Je vais regarder pour commencer avec ta solution en attendant (et pour ma culture perso :)  )

Reply

Marsh Posté le 12-12-2012 à 21:44:38    

Si c'est dans la même base, tu peux faire directement le transfert des données d'une table à l'autre :

Code :
  1. insert into new_table select ENSEMBLE, Elément, 'BT1', BT1 from old_table
  2. ...
  3. insert into new_table select ENSEMBLE, Elément, 'BT300', BT300 from old_table

Le problème, c'est que tu travaille sur la structure (le nombre de colonnes) au lieu de le faire sur les données (rôle normal d'un SGBD). Du coup, le SQL est pas adapté.
Il y a surement moyen de faire la boucle en PL/SQL, ça peut être un exercice intéressant [:figti]
 
edit : enfin l'équivalent du PL/SQL pour mySQL :o


Message édité par mrbebert le 12-12-2012 à 21:45:55

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 13-12-2012 à 21:14:20    

Merci. C'est vrai qu'il faudrait trouver le moyen de faire une boucle parce que la c'est vraiment long sinon.
 
Pour info, j'ai aussi vu ça: les procédures stockées qui pourraient faire quelque chose. Ça te parle?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed