Déplacer colonne

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 : Déplacer colonne

par Jeaf16 » 10 mai 2006, 13:44

Merci à tous je pense qu'avec toutes ces infos j'ai les réponses à toutes mes questions.

Fabien

par sadeq » 10 mai 2006, 13:34

si tu utilise la fonction mysql "LOAD DATA INFILE" pour importer les données à partir d'un fichier texte, tu doit suivre l'exemple suivant tiré de la doc Mysql :
L'exemple suivant charge toutes les colonnes de la table persondata :


mysql> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;

Aucun champ n'est spécifié, ce qui fait que LOAD DATA INFILE s'attend à ce que les lignes lues contiennent le bon nombre de champs. Les valeurs par défaut de FIELDS et LINES sont utilisées.
Si vous voulez charger uniquement quelques colonnes dans une table, spécifiez la liste des champs :


mysql> LOAD DATA INFILE 'persondata.txt' -> INTO TABLE persondata (col1,col2,...);

Vous devez aussi spécifier les champs si l'ordre dans lequel ils seront lus diffère de l'ordre des colonnes dans la table. Sinon, MySQL ne pourra pas savoir à quelle colonne correspond une valeur.
Si une ligne a trop peu de champs, les colonnes omises prendront leur valeur par défaut. Les affectations de valeurs par défaut sont décrites dans CREATE TABLE Syntax .

Une valeur de champs vide et un champ manquant ne seront pas interprétés de la même façon :
- Pour les types chaîne, la colonne est remplie avec la chaîne vide.
- Pour les types numériques, la colonne est mise à 0 .
- Pour les types dates et heures, la colonne est mise au zéro approprié pour le type. Types temporels .
Pour plus d'infos : http://www.nexen.net/index.php?option=c ... d-data.php

par sadeq » 10 mai 2006, 13:14

dans ton fichier SQL d'importation t'as des inserts porteurs de valeurs qui réalisent l'importation. L'ordre n'est pas important dans une requête INSERT, les seules références importantes sont les noms des champs.
Il faut que les noms et les types de valeurs désignés dans les inserts soient les mêmes que ceux de la table destination.

Exemple:
Soit la table "equipe" qui doit contenir les infos des équipes de foot de la coupe du monde :

Code : Tout sélectionner

-- -- Structure de la table `equipe` -- CREATE TABLE `equipe` ( `id` int(11) NOT NULL auto_increment, `pays` varchar(30) default NULL, `cautch` varchar(30) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
Importation des données:
Le script d'importation des données des équipes de foot :

Code : Tout sélectionner

-- -- Contenu de la table `equipe` -- INSERT INTO `equipe` (`id`, `pays`, `cautch`) VALUES (1, 'Allemagne', NULL); INSERT INTO `equipe` (`id`, `pays`, `cautch`) VALUES (2, 'Costa Rica', NULL);
Dans ce script, INSERT respecte l'ordre des champs de la table "equipe".

ce script est équivalent au script suivant, qui lui ne respecte pas l'ordre des champs :

Code : Tout sélectionner

-- -- Contenu de la table `equipe` -- INSERT INTO `equipe` (`pays`, `id`) VALUES ('Allemagne', 1); INSERT INTO `equipe` (`pays`, `id`) VALUES ('Costa Rica', 2);
Remarque:
  • Dans les 1° parenthèses les champs sont cités sans respecter l'ordre d'origine (il y a même le champ "cautch" qui a disparru car il autorise les nules)
    Dans les 2° parenthèses après VALUES les valeurs données respectent forcement l'ordre des champs cités dans les 1° parenthèses.

Conclusion

L'odre d'origine des champs dans la table n'est pas important lors des opérations de manipulation des données (insert, update, select) seule la référence au champs par noms et types de valeurs est obligatoire.

par Jeaf16 » 10 mai 2006, 12:38

Tout simplement par un fichier .sql

par zeus » 10 mai 2006, 12:34

Si c'est ça, il suffit de modifier la procédure d'importation ...

Comment est-ce que tu importes les données ?

par Jeaf16 » 10 mai 2006, 12:31

En fait mon problème est que j'ai des données d'une table à importer dans ma base qui n'a pas tout à fait la même structure, d'où mon besoin de déplacer certaines colonnes.

Donc ce n'est pas un problème de sortie de données

Ryle
je suis parti jusqu'à présent sur cette méthode bidouillage. Il n'y pas d'autre solution ?
Comment fais-tu pour copier les données d'une colonne ?

Fabien

par Ryle » 10 mai 2006, 12:22

Je crois pas qu'il y ait de commande pour ça, mais tu peux toujours bidouiller un truc du genre renommer ta colonne, créer une nouvelle colonne à l'endroit qui te convient, recopier les données et supprimer la précédente...

Cela dit, en principe c'est une modification purement esthétique, vu que c'est dans les requêtes (select et insert) que tu vas spécifier l'ordre des champs que tu récupères ou insères dans ta table...
(à moins d'avoir basculé du côté obscur du sql et d'avoir choisi de mettre des "select *"... plus facile et plus attrayante elle est... mais tellement plus dangereuse en cas de modification :))

par zeus » 10 mai 2006, 12:20

Quelle sera l'avantage pour toi ? :-k

L'ordre des tables dans la base SQL n'as pas d'importance puisque c'est toi, à l'affichage, qui va décider de l'ordre des colonnes.

Sans aller jusqu'a l'affichage, depuis la requete SELECT, tu peut donner l'ordre de sélection des champs

par Jeaf16 » 10 mai 2006, 12:15

Dans ma table SQL.

par zeus » 10 mai 2006, 12:13

Déplacer des colonnes ? où ça ?
En sorti d'une requete, dans une page HTML, dans une base de données ?

Déplacer colonne

par Jeaf16 » 10 mai 2006, 12:12

Bonjour

Je souhaite savoir s'il est possible de déplacer des colonnes pour réordonner ses données.

Ex : avant j'ai nom, prenom, email
après j'aimerais avoir email, nom, prenom

Merci de votre réponse
Fabien