Est-il possible d'inclure les en-têtes d'une manière ou d'une autre lors de l'utilisation de MySQL INTO OUTFILE
?
mysql
into-outfile
Brett
la source
la source
ORDER BY
dans l'SELECT
article. La ligne d'en-tête peut être n'importe où dans le fichier généré en fonction de la commande.La solution fournie par Joe Steanelli fonctionne, mais faire une liste de colonnes n'est pas pratique lorsque des dizaines ou des centaines de colonnes sont impliquées. Voici comment obtenir la liste des colonnes de la table my_table dans my_schema .
Vous pouvez maintenant copier et coller la ligne résultante comme première instruction dans la méthode de Joe.
la source
ORDER BY ORDINAL_POSITION
gère çaGROUP_CONCAT(CONCAT('"',COLUMN_NAME,'"') order BY ORDINAL_POSITION)
Pour une sélection complexe avec ORDER BY, j'utilise ce qui suit:
la source
Vous pouvez utiliser l'instruction préparée avec la réponse de Lucek et exporter dynamiquement la table avec le nom des colonnes en CSV:
Merci Lucek.
la source
Cela vous permettra d'avoir des colonnes ordonnées et / ou une limite
la source
Query OK, 100 rows affected (14.72 sec)
Deuxième laissez-passer avec le vôtreQuery OK, 101 rows affected (0.00 sec)
Je fais simplement 2 requêtes, d'abord pour obtenir la sortie de la requête (limite 1) avec les noms de colonnes (pas de code en dur, pas de problèmes avec les jointures, Trier par, les noms de colonnes personnalisés, etc.), et la seconde pour faire la requête elle-même et combiner les fichiers en un seul CSV fichier:
la source
J'ai rencontré un problème similaire lors de l'exécution d'une requête mysql sur de grandes tables dans NodeJS. L'approche que j'ai suivie pour inclure les en-têtes dans mon fichier CSV est la suivante
Utilisez la requête OUTFILE pour préparer le fichier sans en-têtes
Récupérer les en-têtes de colonne pour le tableau utilisé au point 1
Ajoutez les en-têtes de colonne au fichier créé à l'étape 1 à l'aide du package npm prepend-file
L'exécution de chaque étape a été contrôlée à l'aide de promesses dans NodeJS.
la source
C'est une triche alternative si vous êtes familier avec Python ou R, et votre table peut tenir dans la mémoire.
Importez la table SQL dans Python ou R, puis exportez-la au format CSV et vous obtiendrez les noms de colonnes ainsi que les données.
Voici comment je le fais en utilisant R, nécessite la bibliothèque RMySQL:
C'est un peu une triche, mais j'ai trouvé que c'était une solution de contournement rapide lorsque mon nombre de colonnes était trop long pour utiliser la méthode concat ci-dessus. Remarque: R ajoutera une colonne 'row.names' au début du CSV, vous voudrez donc la supprimer si vous avez besoin de vous fier au CSV pour recréer la table.
la source
Donc, si toutes les colonnes de
my_table
sont un type de données caractère , nous pouvons combiner les réponses principales (de Joe, matt et evilguc) ensemble, pour obtenir l'en-tête ajouté automatiquement dans une requête SQL `` simple '', par exempleoù les deux dernières lignes font la sortie csv.
Notez que cela peut être lent s'il
my_table
est très volumineux.la source
Je pense que si vous utilisez un UNION, cela fonctionnera:
Je ne connais pas de moyen de spécifier directement les en-têtes avec la syntaxe INTO OUTFILE.
la source
En fait, vous pouvez le faire fonctionner même avec un ORDER BY.
Il faut juste quelques astuces dans l'ordre par instruction - nous utilisons une instruction case et remplaçons la valeur d'en-tête par une autre valeur dont le tri est garanti en premier dans la liste (cela dépend évidemment du type de champ et si vous triez ASC ou DESC)
Supposons que vous ayez trois champs, name (varchar), is_active (bool), date_something_happens (date), et que vous souhaitiez trier les deux seconds par ordre décroissant:
la source
Étant donné que la fonctionnalité 'include-headers' ne semble pas encore intégrée et que la plupart des "solutions" ici doivent taper les noms des colonnes manuellement, et / ou ne même pas prendre en compte les jointures, je vous recommande de contourner le problème .
La meilleure alternative que j'ai trouvée jusqu'à présent est d'utiliser un outil décent (j'utilise HeidiSQL ).
Mettez votre demande, sélectionnez la grille, faites un simple clic droit et exportez vers un fichier. Il a toutes les options nécessaires pour une exportation propre et devrait gérer la plupart des besoins.
Dans la même idée, l'approche de user3037511 fonctionne bien et peut être automatisée facilement .
Lancez simplement votre requête avec une ligne de commande pour obtenir vos en-têtes. Vous pouvez obtenir les données avec un SELECT INTO OUTFILE ... ou en exécutant votre requête sans la limite, à vous de choisir.
Notez que la redirection de sortie vers un fichier fonctionne comme un charme à la fois sous Linux ET Windows.
Cela me donne envie de souligner que 80% du temps, lorsque je veux utiliser SELECT FROM INFILE ou SELECT INTO OUTFILE, je finis par utiliser autre chose en raison de certaines limitations (ici, l'absence de 'headers options', on un AWS-RDS, les droits manquants, etc.)
Par conséquent, je ne réponds pas exactement à l'op question ... mais il devrait répondre à ses besoins :)
EDIT: et de répondre effectivement à sa question: pas
tant de 07/09/2017, vous ne pouvez pas inclure des en- têtes si vous coller avec la commande SELECT INTO OUTFILE : |
la source
un exemple de mon capteur de nom de table de base de données avec des colonnes (id, heure, unité)
la source
J'écrivais mon code en PHP, et j'avais un peu de mal à utiliser les fonctions concat et union, et je n'utilisais pas non plus de variables SQL, de quelque manière que ce soit, je l'ai fait fonctionner, voici mon code:
la source
Voici un moyen d'obtenir les titres d'en-tête à partir des noms de colonnes de manière dynamique.
la source
Je voudrais ajouter à la réponse fournie par Sangam Belose. Voici son code:
Cependant, si vous n'avez pas configuré votre
"secure_file_priv"
dans les variables, cela peut ne pas fonctionner. Pour cela, vérifiez le dossier défini sur cette variable en:La sortie devrait ressembler à ceci:
Vous pouvez modifier cette variable ou modifier la requête pour afficher le fichier dans le chemin par défaut affiché.
la source
MySQL seul ne suffit pas pour faire cela simplement. Vous trouverez ci-dessous un script PHP qui produira des colonnes et des données au format CSV.
Entrez le nom de votre base de données et les tables en haut.
Vous aurez besoin de ce répertoire dans lequel vous souhaitez générer la sortie. MySQL doit avoir la capacité d'écrire dans le répertoire.
Vous pouvez modifier les options d'exportation CSV dans la requête:
À la fin, il y a un appel exécutable à GZip le CSV.
la source
la source