|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : mars 2008 Messages : 140 ![]() |
Bonjour
J'ai un petit soucis. J'ai une requête mySql qui modifie le nom d'un champ. Code :
Code :
Fatal error: Uncaught exception 'PDOException' WITH message 'SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name Merci |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
Pour quelle raison as-tu besoin de modifier, par un programme externe, le nom d'une colonne (et pas d'un champ, on n'est pas à la campagne !) ?
En principe on modélise les données, on implémente le modèle de données et les programmes externes interroge la base de données sans en modifier la structure. Et quand on a besoin de modifier la structure d'une BDD, c'est lors de modifications importantes des besoins initiaux. On le fait alors directement dans la BDD, éventuellement avec un logiciel fait pour ça, genre phpMyAdmin ou MySQL Workbench, mais pas par un programme externe fait à la main, ou à la rigueur par un script SQL qu'on aura testé au préalable sur une environnement de test.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : mars 2008 Messages : 140 ![]() |
Bonjour j'ai besoin de modifier les champs de ma table car c'est un besoin exprimé par mon patron sur un projet de script permettant de charger un CSV dans une base.
Lorsqu'on charge un csv dans une base nous avons des utilisateurs qui viennent avec des fichiers différents. Le souhait de mon patron est que ces utilisateurs chargent dans la base le fichier tel quel. Et lui puisse avoir la main sans passer par phpMyadmin pour modifier les champs des colonnes avec les noms qu'ils souhaitent. Au chargement du csv d'orgine dans la base, les colonnes prennent par défaut les noms champ1 champ2 champ3...etc en fonction du nombre de colonne dans le fichier. L'objectif est maintenant de pouvoir changer champ1 en client par exemple. J'ai réussi à le faire sauf que comme j'indiquais dans mon premier post. Si on change le nom d'un champ par un nom déjà existant j'ai une exception ce qui est normal. Ce que je souhaiterais savoir, c'est de savoir s'il y a une requête qui teste si le champ existe ou nom avant de modifier le champ pour éviter d'avoir l'exception à l'écran ? Merci |
|
|
00
|
|
|
#4 |
![]() ![]() |
Encore une fois, les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL !
Pour connaître les colonnes existantes dans une table, interroge la vue information_schema.COLUMNS.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : mars 2008 Messages : 140 ![]() |
Les champs sont dans ma table Mysql ??? Ok je me suis peut être mal exprimé. Alors voici un peu de précision.
J'ai un utilisateur qui charge 1 fichier csv avec 4 colonnes qui comportent chacune des données. j'ai un deuxième qui charge un fichier csv mais de 7 colonnes. Lorsqu'un utilisateur charge son fichier, par défaut les champs correspondant dans la base mysql sont nommés champ1, champ2...etc Donc dans phpMyadmin la structure de mes deux tables est la suivante : table_user1 Champ1, champ2, champ3, champ4 Table_user2 Champ1,champ2,champ3,champ4,champ5,champ6,champ7 Le souci est que parmis ces champs on ne sait lequel correspond au nom du client, prénom du client...etc J'ai donc fait un script qui m'affiche les 10 première ligne de chaque table. Ainsi mon patron peut à base d'un menu déroulant. Dire par exemple que le champ1 de tab_user1 contient les noms des clients, le champ 3 le prénom et le 4 l'adresse. Sauf que mon souci est que si je dis que le champ 1 c'est le nom par exemple. Si ma table_user1 a déjà ce champ, il me génère une exception ce qui est normal car on ne peut avoir deux champs dans une table qui porte le même nom. Je ne sais pas si c'est plus claire à présent ? |
|
|
00
|
|
|
#6 | ||
![]() ![]() |
J'avais bien compris.
Je t'aiguillais sur information.schema.COLUMN pour que tu testes l'existence du nom de la colonne. Ceci dit, faudrait savoir ! Citation:
Citation:
Les fichiers CSV d'import ne comprennent-il pas d'entêtes de colonnes ? Que fais-tu de ces données ensuite ? Je préconiserais de n'utiliser les tables d'importation que pour l'importation et de répartir les données de ces tables temporaires dans la vraie structure de la BDD. Dès lors, tu n'as plus besoin de renommer les colonnes de la table d'import mais seulement de savoir que dans la requête de répartition la colonne "nom" de la table "X" est alimentée par la colonne "champ1" de la table d'import.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#7 | |
|
Membre à l'essai
![]() Inscription : mars 2008 Messages : 140 ![]() |
=> Aucune colonne ne s'appelle donc "nom".
Oui aucune colonne du fichier d'origine ne s'appelle nom. Si ton patron renomme par exemple la colonne "Champ1" en "Nom" il ne peut pas y avoir d'erreur ! Oui sauf que comme l'identification des colonnes se fait par une liste déroulante qui se trouve sur chaque colonne. Si je sélectionne pour la première colonne le champ nom... et que par erreur je sélectionne nom pour le 4e. Ben j'ai le Fatal Error car lorsque la 4e colonne voudra prendre "nom" ben il me dira que ce champ existe déjà ! D'où ma question... Que fais-tu de ces données ensuite ? L'objectif est de constituer des tables mysql avec les fichiers csv qui contienne des données clients. Qu'on peut visualiser depuis des requêtes et ou ré exporté avec des filtres. Par exemple export csv de la table_user1 avec juste le nom et prénom et téléphone du client...etc Citation:
Je ne sais pas si j'ai été claire ??? Mais je te remercie de te prendre du temps et de te soucier de mon problème.
|
|
|
|
00
|
|
|
#8 | |
![]() ![]() |
Ça ne ressemble pas à une base de données structurée ton truc !
J'ai l'impression que ton patron ferait aussi bien d'utiliser un tableur ! ![]() Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 874 ![]() |
salut,
la solution de la table d'import intermédiaire peut être un bon plan en effet... ne serait-ce que pour la visualisation de ce qu'il y a dedans et une fois sur le serveur mysql ça fait moins de brassage php-mysql à partir de cette table, dont il est facile de recueillir la structure avec php, tu peux constituer ta requête de remplissage dynamiquement coté php en fonction des choix de ton patron sur les colonnes à garder et leur ordre... en résumé:
comme ça aucune modification de structure à faire, tu vois... c'est ta requête d'import entre tes 2 tables qui fait ensuite le boulot d'adaptation du nombre de colonne et le nom de la destination, l'ordre importe peu par contre...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com