Suppression de toute les colonnes dans une table

GYo
Eléphanteau du PHP | 11 Messages

18 mars 2009, 17:10

Bonjour,

1) Je voudrais savoir comment supprimer toute les colonnes d'une table.

j'ai essayer "ALTER TABLE Nom_de_la_table DROP * " mais cela ne fonctionne pas.

Je précise que je ne souhaite pas rentrer le nom de la colonne a supprimer

2) Je voudrais savoir autrement comment supprimer toute les colonnes d'une table sauf d'une seule dont on connait le nom (ou garder la première colonne de la table et supprimer le reste)

merci d'avance pour vos réponses

Eléphanteau du PHP | 30 Messages

18 mars 2009, 17:14

Bizarre, ce n'est pas trop le genre d'opération qu'on cherche à automatiser généralement.

Est-ce que supprimer toutes les colonnes d'une table ne revient pas finalement à supprimer la table elle-même ?

Eléphant du PHP | 254 Messages

18 mars 2009, 18:29

Code : Tout sélectionner

TRUNCATE TABLE "nom de table"
vide une table de tous ses enregistrements

Code : Tout sélectionner

DROP TABLE "nom de table"
supprime complètement la table

Quand a supprimer les colonnes d'un table sauf une, je vois pas l'intérêt et cela peut se révéler impossible ...

Es tu sûr de parler de colonnes et si oui, peut tu expliquer un peu plus ? :roll: [/quote]

ViPHP
ViPHP | 2144 Messages

18 mars 2009, 22:51

Bizarre, ce n'est pas trop le genre d'opération qu'on cherche à automatiser généralement.

Est-ce que supprimer toutes les colonnes d'une table ne revient pas finalement à supprimer la table elle-même ?
Oui, on peut en effet se demander si tu n'aurais pas un petit problème de design. si tu veux des conseils n'hésites pas à nous donner quelques détails.

GYo
Eléphanteau du PHP | 11 Messages

19 mars 2009, 10:27

Merci à vous tous d'avoir répondu,

Donc en fait dans ma table il n'y a qu'une seul colonne que je ne change jamais de nom, par contre les autres peuvent changer.
En gros ma table a comme nom de colonne "activité" qui reste tout le temps et les colonnes qui suivent sont le nom des zone géographique qui peuvent changer. En effet j'ai une page ou je rajoute ou je supprime des zone, et au moment ou je les enregistre (dans une autre table) je voudrais récupèrer le nom des zones et ainsi modifier ma table Petite précision aussi, tout les champs rentrer dans activité ne change pas.

Je souhaite donc pouvoir garder la colonne activité et supprimer le reste sans avoir à rentrer leur nom en "dur" dans la requête

note1: Effectivement Kemper ce que tu dis est juste je l'ai testé hier

Eléphant du PHP | 254 Messages

19 mars 2009, 10:31

Peut tu nous donner la structure de tes tables ?

GYo
Eléphanteau du PHP | 11 Messages

19 mars 2009, 11:19

Qu'appelle tu structure de la table?

La table ou je rentre mes zones ressemble à cela :
département/ Zone/ activité/ sous zone


drome /ZoneA /X /z1
drome /ZoneA /X /z3
drome /ZoneV /X /z4
var /ZoneB /Y /za
var /ZoneB /Y /zu
var /ZoneF /Y /zj
var /ZoneF /Y /zk

ect...


la table que je modifie ressemble alors à cela:

activité/ ZoneA/ ZoneV/ ZoneB/ ZoneF
X /32 /45 /76 /1
Y /43 /34 /4 /54

ect...

ViPHP
ViPHP | 1996 Messages

19 mars 2009, 11:48

Je pense que le plus simple est de créer une autre table... Tu aurais une table de travail et une table de stockage.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

GYo
Eléphanteau du PHP | 11 Messages

19 mars 2009, 11:58

Je ne comprend pas. Pour moi la table de stockage comme tu dis c'est la première et ma table de travail c'est la deuxième sauf que ma deuxième table évolue en fonction des zone de la première.

ViPHP
ViPHP | 1996 Messages

19 mars 2009, 12:45

Tiens ta structure me rappelle un cout que j'avais fais sur les transport par zone...
Bon sinon avec un structure comme ceci (que j'avais pas bien lu désolé : donc tu oublies ce que j'ai dis précédemment), je stockerai l'ID de la table 2 dans la table 1 :

table 1
département/ Zone/ id activité/ sous zone


drome /ZoneA /1 /z1
drome /ZoneA /1 /z3
drome /ZoneV /1 /z4
var /ZoneB /2 /za
var /ZoneB /2 /zu
var /ZoneF /2 /zj
var /ZoneF /2/zk

table 2

ID/activité/ ZoneA/ ZoneV/ ZoneB/ ZoneF
1/X /32 /45 /76 /1
2/Y /43 /34 /4 /54

Ainsi les deux tables seront indépendantes (mais c'est peut être ce que tu faisais avec ton X et Y)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

GYo
Eléphanteau du PHP | 11 Messages

19 mars 2009, 14:04

Je ne cherche pas a avoir 2 tables indépendantes. Ce que je cherche à faire c'est prendre le nom des zones de la table 1 et les mettre en nom de colonne de la table 2

exemple:

Quand je rajoute une ligne dans la table 1:
savoie / ZoneD / X1 / zl

Cela me donne dans la table 2 les colonnes :
activité/ ZoneA/ ZoneV/ ZoneB/ ZoneF/ ZoneD
(la colonne activité est la seule à rester tout le temps, le reste des colonnes peuvent changer)

Si je supprime dans la table 1 toute les ZoneA, cela me supprime le nom de colonne ZoneA dans la table 2

les autres champ n'ont pas d'importance

Eléphant du PHP | 254 Messages

19 mars 2009, 15:58

Moi ça me parait totalement surréaliste de vouloir modifier la structure d'une base de donnée a la volée ... M'enfin c'que j'en dis hein ... Je suis la discutions au cas ou :P

GYo
Eléphanteau du PHP | 11 Messages

19 mars 2009, 18:08

J’y suis finalement arrivé. Bien que cela soit assez lourd je n’ai pas trouvé d’autres solutions.

Petit rappel de ce que je voulais faire :

- a) Ne Garder dans ma table 2, que la colonne activité avec ce qu’il y a de rentré dedans.
- b) Remplacer le reste des colonnes en fonction des zones de la table 1

J’ai donc fait dans l’ordre :

- Je supprime la table 2 (toutes les colonnes disparaissent)
- Je crée une nouvelle table du même nom (table2) avec ma colonne qui ne change jamais (« activité ») (donc à ce stade la table 2 n’est composée que d’une seule colonne)
- Je lance ma fonction qui va lister le type d’activité de la table 1
- Je rentre les résultats dans la colonne activité de la table 2 (j’ai réalisé le petit a) )
(J’espère que vous suivez toujours ^^)
- Je lance ma fonction qui va lister les zones de la table 1
- J’ajoute ces zones en tant que colonne dans la table 2

Et voila au final si dans ma table 1 on rajoute ou on supprime des zones ou des activités, ma table 2 sera à jour au niveau de sa structure avec la colonne activité qui ne change jamais et le reste des colonnes qui ont été modifié. De plus, je n'ai pas eu à écrire "en dur" le nom de chaque zone et de chaque activité lors de la création/insertion/suppression/modification des tables.

merci à tous d'avoir participé à ce post, si vous voulez plus de précision sur ce que j'ai fait et à quoi sa servait vous pouvez m'envoyer un mp.

ViPHP
ViPHP | 2144 Messages

20 mars 2009, 00:06

Tant mieux si ça fonctionne.

Mais oui, je rejoins l'avis des autres: on ne modifie jamais la structure d'une base de donnée à la volée. Les données contenues dans les tables évoluent aux grés des insert/update/delete mais jamais les structures.
On se retrouve très vite dans une impasse pour implémenter une opération supplémentaire: par exemple une recherche. Tu devrais alors vérifier chaque colonne une à une ? très lourd. C'est pas pour critiqué ta solution, tant mieux si ça fonctionne mais soit vigilent, souvent un mauvais design ne pose problème que bien plus tard: une fois que la db est en production et qu'on ne peut plus rien y changer...

GYo
Eléphanteau du PHP | 11 Messages

20 mars 2009, 11:15

Là est la difficulté de ce que je dois réalisé pour mon client, il veut que tout soit modulable (zone activité...), mon application au final se rapproche d'un système expert. Cette demande de modularité est compliqué à mettre en oeuvre du coup cela devient vite très lourd à moins de connaitre d'autre solutions. Cela implique de ne rien écrire en "dur" lors des requêtes. En plus pour l'instant je n'ai pas pu testé sur les machines du boulot donc je sais pas si cela va marcher.