SaugetierchenII Geschrieben 13. November 2002 Teilen Geschrieben 13. November 2002 Hi, ich möchte mittels eines SHELL-Skripts einen mysql Datensatz auslesen und den erhaltenen Wert weiterverarbeiten, das problem ist die Ausgabeformatierung von SELECT.. Beispiel: SELECT DISTINCT art FROM pet ergibt: +---------+ | art | +---------+ | Vogel | | Katze | | Hund | | Hamster | | Schlange| +---------+ das kann ich aber nicht weiterverarbeiten folgender massen stelle ich mir das vor: #!/bin/bash $ergebnis=(SELECT * FROM name where art ='Vogel') die Variable $ergebnis solte dann einen string enthalten...... geht das überhaupt und wenn ja wie kann ich das bewerkstellen? wäre echt dankbar für eure hilfe!!!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Wellenreiter Geschrieben 13. November 2002 Teilen Geschrieben 13. November 2002 Hi, SaugetierchenII Wenn wir vom gleichen reden, dann probier doch mal SELECT (DISTINCT art) AS variablenname FROM pet WHERE art = 'Vogel' Grüsse Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
readonly Geschrieben 13. November 2002 Teilen Geschrieben 13. November 2002 Originally posted by SaugetierchenII folgender massen stelle ich mir das vor: #!/bin/bash $ergebnis=(SELECT * FROM name where art ='Vogel') die Variable $ergebnis solte dann einen string enthalten...... geht das überhaupt und wenn ja wie kann ich das bewerkstellen? Wie wäre es mit der Option e von mysql. (siehe man mysql) Außerdem halte ich Deinen Ansatz für fraglich, da Du ein mehrzeiliges Ergebnis in einer Variablen speichern willst. Ich habe schon einige Bashskripte geschrieben, aber soetwas ist mir bislang nicht über den Weg gelaufen (mehrzeiliger Wert). Ansonsten würde ich Dir eher vorschlagen, daß ganze mit einem Perlskript zu lösen, da bei Perl die besseren/einfacheren Stringverarbeitungsfunktionen hat. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 13. November 2002 Teilen Geschrieben 13. November 2002 Nabend so spät noch ! Also die Empfehlung für Perl ist mit Sicherheit nicht schlecht. Perl bietet einiges an Funktionen, gerade wenn es darum geht, Teile aus Zeichenketten, oder Teile aus Dateien etc. zu extrahieren oder zu isolieren. Wie mein Vorgänger seh ich auch das Problem der Übergabe der Werte aus der Tabelle mit dem Select. Da wüsste ich auf Anhieb so spät heute abend auch keine Lösung wissen. Leider bietet ja mySQL meines Wissens nach noch nicht die Möglichkeit des UNLOAD INTO-SQL-Befehls, wo ich ja mittels des Befehls verbunden mit einer Select-Abfrage eine Datei erstellen kann, die ich dann ja mit beliebigen Programmiersprachen wie eine ganz normale ASCII-Datei behandeln kann. Weiß auch nicht, ob das bei mySQL geplant ist, sowas in der Art zu implementieren oder ob das überhaupt Standard-SQL ist ?! Flori Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
readonly Geschrieben 14. November 2002 Teilen Geschrieben 14. November 2002 Originally posted by Flori Leider bietet ja mySQL meines Wissens nach noch nicht die Möglichkeit des UNLOAD INTO-SQL-Befehls, wo ich ja mittels des Befehls verbunden mit einer Select-Abfrage eine Datei erstellen kann, die ich dann ja mit beliebigen Programmiersprachen wie eine ganz normale ASCII-Datei behandeln kann. Weiß auch nicht, ob das bei mySQL geplant ist, sowas in der Art zu implementieren oder ob das überhaupt Standard-SQL ist ?! Wie wäre es mit der Anwendung der Ausgabeumleitung? mysql -e SQL-Statement >ausgabe.txt Die Datei ausgabe.txt kann man dann sehr wohl weiterverarbeiten. viele grße readonly Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 14. November 2002 Teilen Geschrieben 14. November 2002 Hallo readonly ! Wer lesen kann, ist natürlich klar im Vorteil, muß ich mir da selbst gestehen... Hast natürlich recht : mysql -u <user> -p -e "select * from db1.tabelle" > ergebnis.txt Damit kriegt man ja das, was man auch anderswo mit dem UNLOAD erreicht ! *vor die Stirn schlag* Aber jetzt hab ich in der mysql-Doku direkt mal nachgeblättert und in dem Zusammenhang rausgefunden, daß es sogar einen Befehl "SELECT .... INTO OUTFILE <name> gibt, der das Komplement von "LOAD DATA INFILE" darstellt. Damit kann ich dann sogar bestimmen wie meine Werte-Trenner in der Datei aussehen. Letztlich sieht das dann so aus : mysql -u <user> -p -e "SELECT * FROM db1.tabelle INTO OUTFILE '<name>' FIELDS TERMINATED BY '#' LINES TERMINATED BY '\n'" Damit schreibt man die Werte aus der Select-Abfrage in die Datei <name>, wobei die jeweiligen Spalten durch "#" getrennt werden. Das Ende eines Datensatzes wird mit dem Zeichen für Zeilenumbruch "\n" abgeschlossen. So könnte man dann mit dem Shell-Skript auf der Datei "rumarbeiten". Unter Unix/Linux gibts da ja Möglichkeiten mit grep, awk, cat, sed etc... (Allerdings hat dieses komische Notepad -notepad.exe - unter Windows die Angewohnheit den Zeilenumbruch "\n" anstatt mit nem echten Zeilenwechsel, mit nem "schwarzen Kästchen" anzuzeigen. Im DOS-Editor ists ne echte, neue Zeile. Fragt sich wie man sowas mit String-Operationen abfängt, da im Notepad der Hex-Wert auch aus zwei Werten besteht. Aber das gehört wohl in ein anderes Forum - vielleicht da mal posten) Auf jeden Fall gibts wohl doch einige Mittel und Wege, die Abfrageergebnisse in einer Datei zu sichern und auf die Datei mit Shell-Skript oder anderer Sprache zuzugreifen. Vielleicht sogar besser, als immer wieder auf temporäre Abfragetabellen zuzugreifen.... Flori Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.