2009-02-26 9 views
1

Supposons que vous avez une grande table avec des milliers de lignes et 3 colonnes, en regardant quelque chose comme ceci:MySQL Export toutes les lignes avec les mêmes données de colonne en même fichier

Name    City    Birthyear 

Egon Spengler  New York   1957 
Mac Taylor   New York   1955 
Sarah Connor  Los Angeles  1959 
Jean-Luc Picard  La Barre   2305 
Ellen Ripley  Nostromo   2092 
James T. Kirk  Riverside   2233 
Henry Jones   Chicago   1899 
Jason Bourne  Paris    1971

...... et bientôt. Est-il possible de trier les gens par ville dans des fichiers séparés? Par exemple, si vous avez 100 villes ou plus dans la table, y a-t-il une requête qui créerait 100 fichiers ou plus avec des noms de personnes et des années de naissance? Pour un plus petit nombre de villes, on pourrait utiliser

-e « sélectionnez Nom, Birthyear du tableau où la ville = New York »> NewYork.csv

et ainsi de suite pour chaque ville dans le tableau. Mais ce n'est pas amusant de le faire manuellement si vous avez des centaines de villes.

Répondre

1

Du service malade et le mal (peut contenir des erreurs de syntaxe, cela est juste pour vous donner une idée des possibilités tordues):

SELECT concat("SELECT name, birthyear from table where city = '", 
          city, 
          "' into outfile '", 
          city,"';") 
    FROM table 

Mettez ça dans query1.sql, puis:

mysql <query1.sql> query2.sql 
mysql < query2.sql 

Ecrivez une requête qui génère des requêtes à la volée, puis exécutez les requêtes résultantes sur la base de données. Cela tombe définitivement dans la catégorie "rapide et sale".

Notez également que les requêtes s'exécutent sur le serveur MySQL, ce qui pourrait être une boîte différente de celle où vous exécutez le client MySQL. Si oui, vous aurez besoin d'un moyen d'obtenir les fichiers résultants. Si vous n'avez pas d'accès shell au serveur, cela peut poser un problème, sauf s'il existe un système de fichiers réseau sur lequel le serveur peut écrire et que vous pouvez lire depuis un autre hôte.

+0

Brillant! Merci beaucoup :) – Daniel

0

Je pense que votre meilleur pari serait d'écrire un petit script qui fait un SELECT DISTINCT sur chaque colonne et utilise les résultats pour écrire les requêtes du formulaire que vous suggérez.

0

Vous pouvez également mettre "select Name, Birthyear de Table order by City" dans un csv, puis utiliser un petit script (Perl ou quelque chose) pour diviser le fichier où le nom dans la colonne ville change. Quoi qu'il en soit, probablement impossible sans un script externe.

Questions connexes