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

PHP & Base de données Discussion :

deplacer un champ dans une table de BDD


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut deplacer un champ dans une table de BDD
    Bonjour le forum,

    Je dispose de deux tables, une ancienne et une nouvelle.

    L'ancienne devait répondre a l'époque a une demande spéciale, je n'avais donc pas reflechi a organiser le positionnement des champs.

    L'evolution de mes fichiers PHP lisant ma table a reclamé la créatin d'une autre table, dont l'organistaion est différente de la premiere table.

    Exemple le champ nom se trouve 5eme dans la premiere table et 20eme dans la deuxieme table.

    Je voudrais savoir, s'il vous plait, comment faire pour adapter la premiere table a la seconde (déplacer les champs d'une table, je ne peux par les détruire pour les reconstruire a l'endroit ou je veux, cqr toutes mes infos seraient par la meme effécées.) faire en sorte que le champ nom de la premiere soit déplacé dans cette meme table a la 20eme place.

    Merci beaucoup de votre aide, et trés bonne journée le forum.

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Salut,

    Ce que tu cherches à faire dépend de ton SGBD. Et ce n'est utile que pour des requêtes qui récupèreraient tous les champs ( par exemple un SELECT * ou un INSERT sans liste des éléments à insérer )

    Pour changer l'ordre des champs, il faut, en fonction de ton SGBD, aller voir les tables systèmes; Ce sont elles qui contiennent les définitions de tes tables, et donc la liste des colonnes. Il se peut que tu puisses changer l'ordre mais je ne sais pas si c'est toujours possible; Je ne suis même pas sûr que tu puisses avoir le droit de modifier ces tables systèmes a la mano.

    Quel SGBD utilises-tu ?

    A+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    phpMyAdmin 2.2.3

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE tbl_name CHANGE col_name col_definition AFTER other_col_name
    http://mysql.com/alter table

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Merci Mr N, je connaissais cette fonction, mais elle ne marche pas, j'ai regulierement une erreur., je pense que je vais laisser tomber, et modifier mes select * en select nom de colonne et le tour sera joué.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    J'ai trouvé plus simplet plus rapide.

    Je vais exporté en CSV, modifier l'ordre des colonne, recéer une table conforme et recoller le fichier CSV a la nouvelle table.

    Je teste de suite.

    Bonne journée

  7. #7
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par kaolivier
    Merci Mr N, je connaissais cette fonction, mais elle ne marche pas, j'ai regulierement une erreur., je pense que je vais laisser tomber, et modifier mes select * en select nom de colonne et le tour sera joué.
    Je vois pas le rapport entre un select * et l'ordre des colonnes. A moins que... ne me dit pas que tu n'utilises pas mysql_fetch_assoc en lieu et place de mysql_fetch_row ???

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    PIRE QUE TOUT
    j'utilise while($ligne = mysql_fetch_array($result, MYSQL_ASSOC)

    C'est pas grave, je me suis debrouillé autrement, par contre, je n'arrive pas a faire en sorte que phpmyadmin accepte de lire un fichier CSV pou rle traduire en table et données !!!!

    Trés embetant

  9. #9
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ben je ne vois toujours pas pourquoi l'ordre de tes colonnes à de l'importance.
    Suffit d'acceder à tes données via $ligne['nom_du_champ']
    et de faire des requêtes d'insertion complêtes (comme ça devrait être fait normalement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table(champ1, champ2) values (val1, val2)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table values (val1, val2)

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Je suis d'accord mais quand on gére deux ou trois requetes avec 3 ou 4 colonne ca va, mais j'ai en gros une trentaire de requete pour 200 colonnes, donc un peu lourd quand meme.


    Mais je suis passé a autre chose, j'ai telechargé ma BDD en CSV, modifié les colonne, et j'essaie en vain d'importer mon fihcier CSV dans ma bdd, mais marche pas, j'ai trouvé cette fonction sur le net : http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

    mis je n'arrive pas trop a l'utiliser.

    Ma table est déja écrite, mon fihcier csv traduit en txt donne a peu prés ceci :
    var1;var2;var3;var4.....
    etc...

    comment puis je la traduire et l'importer dans mon SQL, car en SQL c'est plutot ca que je devrais avoir :
    INSERT INTO table VALUES ('var1', 'var2', 'var3', 'var4',...);


    Merci d'avance

  11. #11
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Pourquoi faire simple quand on peut faire compliqué ?
    Utilise plutot les outils qui répondent à ton besoin : ALTER TABLE
    Je viens de le faire sur une table de test et tout roule... Colle nous la requête utilisée.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Ok alors faisons un test pour que je comprennes ALTER TABLE.

    Premiére table :
    CREATE TABLE NOUVELLE (
    VARA text NOT NULL,
    VARB text NOT NULL,
    VARC text NOT NULL,
    VARD text NOT NULL,
    VARE text NOT NULL
    ) TYPE=MyISAM;

    CREATE TABLE ANCIENNE (
    VARB text NOT NULL,
    VARD text NOT NULL,
    VARE text NOT NULL,
    VARC text NOT NULL,
    VARA text NOT NULL
    ) TYPE=MyISAM;

    Que dois je taper pour que la table ANCIENNE soit ordonnée comme la table nouvelle?

    ALTER TABLE ANCIENNE CHANGE VARB AFTER VARD ???

    Merci de ton aide

  13. #13
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par Mr N.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE tbl_name CHANGE col_name col_definition AFTER other_col_name
    Tu as oublié la partie col_definition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ANCIENNE CHANGE VARB VARB TEXT NOT NULL AFTER VARD

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Est il possible que ma version de PHPMYADMIN (2.2.3) ne permette pas cette fonction, car chez moi ce la ne fonctionne pas.


    Erreur
    requête SQL :

    ALTER TABLE ANCIENNE CHANGE VARB VARB TEXT NOT NULL AFTER VARD

    MySQL a répondu:


    You have an error in your SQL syntax near 'AFTER VARD' at line 1

    --------
    J'ai meme essayé ça :

    Posted by Kevin Welch on March 18 2005 12:21am [Delete] [Edit]

    To reorder the columns of your table, you can use the ALTER TABLE syntax, since as of MySQL 4.0.1, the keywords FIRST and AFTER can be used in a CHANGE or MODIFY command.

    Example:

    mysql> describe example_table;


    +-------------+------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+------------+------+-----+---------+----------------+| id | int(11) | | PRI | NULL | auto_increment || columnA | bigint(20) | | | 0 | || columnB | text | | | 0 | |+-------------+------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

    mysql> ALTER TABLE example_table CHANGE COLUMN columnB columnB TEXT NOT NULL AFTER id;
    Query OK, 3 rows affected (0.01 sec)
    Records: 3 Duplicates: 0 Warnings: 0

    mysql> describe example_table;

    +-------------+------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+------------+------+-----+---------+----------------+| id | int(11) | | PRI | NULL | auto_increment || columnB | text | | | 0 | || columnA | bigint(20) | | | 0 | |+-------------+------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

    ----
    mais j'ai une erreur :
    ALTER TABLE ANCIENNE CHANGE COLUMN VARB VARB TEXT NOT NULL AFTER VARD

    MySQL a répondu:


    You have an error in your SQL syntax near 'AFTER VARD' at line 1

  15. #15
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ce n'est pas lié à phpMyAdmin mais à la version de MySQL. Chez moi ça marche (4.1)
    Quelle est ta version ?

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    MySQL 3.23.49-

  17. #17
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tu as les moyens de passer à une version plus récente ?
    Sinon une solution est de faire un export :
    [X] Structure
    [X] Add drop table
    [X] Add AUTO_INCREMENT value
    [X] Enclose table and field names with backquotes
    [X] Data
    [X] Complete inserts

    Puis dans cet export il te suffit de modifier l'ordre des tables et de rebalancer la sauce à mysql. Un backup s'impose mais j'espere qu'il est déjà fait

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Merci pour toute ces suggestions, je me suis débrouillé autrement, mais les informations fournies en réponse a mon post me sont précieuse et je les testerai plutard.

    Merci beaucoup et trés bonne journée a tous.

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

Discussions similaires

  1. Deplacer un champs dans une table ?
    Par isa150183 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/07/2006, 15h44
  2. Modification du nom d'un champ dans une table
    Par reef1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2004, 10h55
  3. Réponses: 2
    Dernier message: 19/05/2004, 10h13
  4. changement de type pour un champ dans une table
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2004, 15h26
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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