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

Requêtes MySQL Discussion :

N'exporter que certains champs d'une base de données


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 64
    Par défaut N'exporter que certains champs d'une base de données
    Bonjour,
    Tout d'abord je précise que je suis débutant dans le domaine donc pardonnez mon vocabulaire et mon manque de connaissance.

    Donc voilà j'ai une table dans ma base de donnée contenant toutes les images de mon site web. Quand je clique dessus, j'arrive sur la liste de chaque photos et des "champs" qui les décrivent (filename, description, alttext, ...).

    Ce que je cherche à faire c'est exporter toutes ces lignes mais seulement avec les champs que j'aurais choisis, par exemple seulement les champs "filename" et "description" en CSV pour avoir quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "Photo-1.jpg","description-1"  
    "Photo-2.jpg","description-2"  
    "Photo-3.jpg","description-3"  
    "Photo-4.jpg","description-4"  
    "Photo-5.jpg","description-5"
    Apparent il faut une requête de création de table mais je n'arrive pas tellement à comprendre et j'ai pas envie de faire de bêtise.

    Pour l'instant dans ma requête j'ai ça, sachant que je n'ai que 7 images pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *  FROM 'site1_ngg_pictures'  WHERE (  'pid' = 28 ) OR (  'pid' = 27 ) OR (  'pid' = 24 ) OR (  'pid' = 26 ) OR (  'pid' = 25 ) OR (  'pid' = 22 ) OR (  'pid' = 23 )

    Je demande donc votre aide, merci

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    pour ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *  FROM 'site1_ngg_pictures'  WHERE pid IN(28, 27, 24, 26, 25, 22, 23)
    plus simple à lire, il te suffit de lister chaque pid dans les parenthèses de la fonction IN pour "l'intégrer" à la recherche.

    Ensuite qu'entend tu par exporter ? Extraire toutes les données pour les insérer dans un fichier pour pouvoir plutard faire une importation et retrouver ta base de données au même point qu'à l'export (une sauvegarde de la base concrètement) ? Ou juste une requête pour lister tes images ?

    Deplus évite de faire :
    Car le * n'est pas "concret", quand tu relira ta requête tu ne saura pas qu'elle colonne est utile et si un jour tu ajoute une nouvelle colonne à la table qui est inutile dans ta requête mais utile pour une autre tu remontera quand même les informations qui te seront alors inutile.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    1) Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

    2) Plutôt que d'enchaîner les OR, il vaut mieux utiliser IN.

    3) Les noms d'objets de la BDD ne se mettent pas entre apostrophes, lesquelles sont utilisées pour délimiter les chaînes de caractères.

    4) Il vaut mieux éviter la guerre des étoiles !

    Du coup, après le point 4, tu as ta réponse : Ne sélectionne que les colonnes dont tu as besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT filename, description
    FROM site1_ngg_pictures
    WHERE pid IN (22, 23, 24, 25, 26, 27, 28)
    Dans le cas présent, puisque les pid souhaités sont successifs, tu peux même utiliser BETWEEN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE pid BETWEEN 22 AND 28
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour à tous,

    Pour compléter ce que les autres on fournis, pour la partie export proprement dite dans un fichier avec séparateur genre csv, tu peut utiliser la directive OUTFILE comme ceci (je reprends le code de cinephil):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT filename, description
    INTO OUTFILE 'd:/exportsSql/monfichier.txt'
    FIELDS TERMINATED BY ';'
    LINES TERMINATED BY '\r\n' -- si on veut format dos/windows sinon inutile
    FROM site1_ngg_pictures
    WHERE pid IN (22, 23, 24, 25, 26, 27, 28)
    Cordialement

  5. #5
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 64
    Par défaut
    Merci beaucoup pour vos réponse.
    Donc j'ai essayé de faire la requête pour l'export mais ça me met un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1045 - Access denied for user 'dbo....'@'%' (using password: YES)
    J'utilise phpmyadmin, y'a a t-il un moyen pour régler ce probleme de privilège ou je ne sais quoi ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour,

    Tout dépend du type d'accès que tu as sur le serveur mysql.
    1. Le serveur est sur ta machine
    2. Le serveur est sur une autre machine de ton réseau local
    3. Le serveur est chez un hébergeur


    Pour utiliser SELECT INTO OUTFILE, il faut que le user id ait les droit sur les fichiers, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT SELECT, FILE ON * . * TO "[dbo]"@ "localhost";
    et que le process mysql aie les droit d'écriture sur le répertoire cible.

    si tu as accès et les droit sur le serveur, tu doit pouvoir les configurer.

    Tu peux aussi lancer en ligne de commande msqldump avec l'option "-w" qui permet de placer ta clause where et générer cette fois un fichier local à ta machine.

    Par contre, si c'est un hébergeur, il faut li demander si tu peux avoir ces droits et qules sont les répertoires de sortie autorisé, ou dans le pire des cas, lui demander d'exécuter à ta place l'export (en général, ils ont des procédures prévues pour ce type d'action).

    Pas mal d'info ici :
    http://dev.mysql.com/doc/refman/5.0/en/select.html

    Cordialement


    Est-ce un serveur d'un hébergeur ?

  7. #7
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 64
    Par défaut
    Merci pour ta réponse.
    Il s'agit d'un serveur dédié chez 1&1.
    Donc du coup j'attend de voir ce que tu en penses car je ne sais pas si ça correspond à serveur d'un hébergeur ou pas, et comme tu m'as demandé.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 64
    Par défaut
    Je relance ce sujet car voilà plus d'un moins que je fais ces étapes manuellement en passant par phpmyadmin (car rappelons le la requête sql via phpmyadmin m'envoyais un message d'erreur à cause des droits).
    Je voulais donc savoir si il y avait moyen de le faire autrement, par exemple avec putty ?

    Voici ma requête finale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT `pid`,`filename`,`description`
    INTO OUTFILE 'd:/monfichier.txt'
    FIELDS TERMINATED BY ';'
    FROM XXXXX
    ORDER BY `pid` DESC
    LIMIT 0 , 27
    Je crois que c'est cette ligne qui pose probleme au niveau des droit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INTO OUTFILE 'd:/monfichier.txt

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour theophile76,

    Comme on l"a vu dans les précédents messages, on est bien d'accord que le SELECT ..... INTO OUTFILE écrit dans un fichier qui se trouve sur le serveur ?
    D'après ton dernier message, ça veut dire que ton est serveur est sous Windows, qu'il possède un disque "D:" et que le process mysql as accès en écriture à ce répertoire, c'est bien ça ?

    éventuellement, je te conseillerai de donner un nom de fichier sans répertoire pour voir si ça le crée et où il le mets. Ensuite, tu pourra affiner en précisant un répertoire précis.
    Donc essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INTO OUTFILE 'monfichier.txt'
    A priori, le fichier, sous Windows devrait être créé dans le répertoire "data" ou "data\<database_name>" si une base était sélectionnée.

    Sous Linux, ça doit être (à vérifier)
    "/var/lib/mysql/<database_name>"

    Si même sans préciser le répertoire, tu a une erreur, vois les droits GRANT FILE + les droits du process mysql (à priori ceux du user putty) comme ditr dans mon post du 30/01

    Cordialement

  10. #10
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 64
    Par défaut
    Merci pour ta réponse.
    Donc déjà pour montrer à quel point je suis débutant, j'ai crue que le fichier allait être crée que mon disque dur (D:) à moi...
    Cependant, même remplacement par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INTO OUTFILE 'monfichier.txt
    J'obtiens toujours ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1045 - Access denied for user 'dboXXXXXXXXX'@'%' (using password: YES)
    Du coup j'ai essayé de m’octroyer les droit GRANT FILE + comme tu me dit en utilisant ce code (ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT ALL PRIVILEGES ON [database name].* TO '[database user]' @'[localhost]' IDENTIFIED BY '[database password]';
    Donc voici comment je comptais procéder :

    1. Je lance Putty et dans la case "Host Name" je mets le "Nom d’hôte" que j'ai dans les infos SSH de mon espace client 1&1.

    2. Dans l'invite de commende qui s'ouvre, j'entre mon Nom d'utilisateur.

    3. Je rentre le code "GRANT ALL PRIVILEGES" que j'ai adapté à ma situation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT ALL PRIVILEGES ON [dbXXXXXXXXX].* TO '[dboXXXXXXXXX]' @'[localhost]' IDENTIFIED BY '[database password]';
    Donc là j'ai deux question :
    1. Est-ce que j'ai fait les bonne étapes ?
    2. Est-ce que à la place de 'localhost' je ne devrais pas mettre autre chose ? Car dans mon message d'erreur il y a '%' à la place. Ou même est ce que je ne devrais pas mettre 'localhost:/tmp/mysql5.sock' car c'est le nom du serveur de la base de données de mon compte chez 1&1.

    Merci.

    Remarque : voici ce que j'ai vue à propos du 'localhost' et du '%' mais je n'ai pas vraiment compris à vrai dire, et je sais même pas si ça à vraipment à voir avec mon problème (source) :
    You need to be quite clear about the GRANT command. If you granted it using 'username'@'localhost', it can only be used by a mysql running locally with the database. If you granted it using 'username'@'%', it can only be used from a remote location, not the local machine.

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour,

    A mon avis les réponses aux questions sont :
    1. non, je ne vois pas de connexion à la base avec mysql et le GRANT n'est à mon avis pas le bon (voir après)
    2. Pour le localhost, ça dépend comment tu te connecte à mysql pour faire ton "SELECT INTO OUTFILE", donc c'est ok si tu te connecte bien en localhost quand tu lance mysql


    1ere chose : comment te connecte tu à mysql une fois logé en putty ?
    avec l'utilisateur dboXXXXXXXXX et le hostname 'localhost'?
    2ieme chose : tu n'a pas utilisé le code que je t'ai donné pour donner les droits FILE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT SELECT, FILE ON * . * TO '[dbo]'@ 'localhost';
    en l'occurrence, tu devrais mettre 'dboXXXXXXXXX' au lieu de 'dbo' si ton schema porte ce nom bizarre et pas 'dbo'.

    A priori, ton code ne marche pas parce que FILE est un privilège GLOBAL. Utilise mon code (en adaptant le user bien sût)

    Enfin, dans la phrase que tu dis ne pas comprendre, c'est simple :

    Si tu te connectes localement à mysql, ce qui est à priori le cas si tu lance mysql comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myqsl -u dboXXXXXXXXX  -h localhost -p
    tu as besoin des privilèges 'dboXXXXXXXXX @localhost'

    Si tu te connectes à mysql à distance (tu n'utilise pas putty mais directement mysql depuis une machine client (je pense que sur le serveur dédié 1&1 ça ne doit pas être autorisé pour des raisons de sécurité, mais peut-être que si), par exemple comme cela :
    mais aussi si tu te connectes en putty mais en donnant comme nom d'hote autre chose que localhost, par exemple nomduserveur
    Dans ce cas, il faudra mettre les privilège comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql -u dboXXXXXXXXX  -h nomduserveur -p
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT SELECT, FILE ON * . * TO '[dbo]'@ '%'
    ou, si tu es sûr du nom du serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT SELECT, FILE ON * . * TO '[dbo]'@ 'nomduserveur'
    Voilà, j'espère que ça répond à tes interrogations.

    N'oublie pas qu'il faut aussi que le user du processus mysql ait les droits au sens système d'exploitation d'écriture dans le répertoire destination. mais comme ce serveur "t'appartient", je présume que c'est le cas.

    Cordialement

Discussions similaires

  1. [AC-2007] Exporter seulement certains champs d'une requête vers Excel
    Par MelaAllIn dans le forum VBA Access
    Réponses: 8
    Dernier message: 26/08/2011, 09h26
  2. Afficher les tables et champs d'une base de données
    Par sovo dans le forum Vos contributions VB6
    Réponses: 4
    Dernier message: 21/02/2008, 14h40
  3. Réponses: 2
    Dernier message: 28/06/2006, 20h34
  4. position du champs dans une base de donnée
    Par eric205 dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/04/2005, 09h22
  5. [MFC] Champs d'une base de donnée
    Par MadChris dans le forum MFC
    Réponses: 5
    Dernier message: 24/03/2004, 16h21

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