Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/10/2006, 11h33   #1
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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.
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 11h39   #2
Expert Confirmé
 
Avatar de KiLVaiDeN
 
Inscription : octobre 2003
Messages : 2 714
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 714
Points : 2 689
Points : 2 689
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+
__________________
K
KiLVaiDeN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 11h40   #3
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
phpMyAdmin 2.2.3
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 11h46   #4
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Code :
ALTER TABLE tbl_name CHANGE col_name col_definition AFTER other_col_name
http://mysql.com/alter table
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 11h57   #5
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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é.
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 12h05   #6
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 12h40   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 ???
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 12h55   #8
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h07   #9
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 :
insert into table(champ1, champ2) values (val1, val2)
au lieu de
Code :
insert into table values (val1, val2)
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h23   #10
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h31   #11
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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.
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h41   #12
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h47   #13
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par Mr N.
Code :
ALTER TABLE tbl_name CHANGE col_name col_definition AFTER other_col_name
Tu as oublié la partie col_definition :
Code :
ALTER TABLE ANCIENNE CHANGE VARB VARB TEXT NOT NULL AFTER VARD
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h50   #14
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 13h57   #15
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Ce n'est pas lié à phpMyAdmin mais à la version de MySQL. Chez moi ça marche (4.1)
Quelle est ta version ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 14h01   #16
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
MySQL 3.23.49-
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 14h13   #17
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 15h42   #18
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
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.
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h29.


 
 
 
 
Partenaires

Hébergement Web