SQL Abfrage, aber wie?

  • Guten Tag!


    Aktuell habe ich eine Datenbank in meinem Webhosting, auf die ich soweit auch vom Rootserver zugreifen kann. Jedenfalls komme ich bei der SQL Abfrage einer Spalte nicht weiter, da dieser Output für mich sehr schwer lesbar ist, bzw. auch entsprechend im Script weiterverwendbar,


    Mit SELECT * FROM tbl_users WHERE bigint_userid = 1234 bekomme ich die ganze Zeile, was ein Problem für mich ist.

    * Wie kann ich nur eine Spalte anzeigen lassen wie z.B. "mediumtext_username"?

    * Wie kann ich einen longblob (beinhaltet ein jpg) sowohl in die Datenbank schreiben (außer Upload in phpmyadmin) sowie wieder am Server runterladen und als .jpg speichern?

    * Ist es möglich, die .jpg Datei auch in der Datenbank zu bennen? (Beim Download heißt die jpg Datei jedes mal nur wie jene Spalte, aus der sie stammt.)


    MfG Simon

  • * Wie kann ich nur eine Spalte anzeigen lassen wie z.B. "mediumtext_username"?

    SELECT `mediumtext_username` ...

    * Wie kann ich einen longblob (beinhaltet ein jpg) sowohl in die Datenbank schreiben (außer Upload in phpmyadmin) sowie wieder am Server runterladen und als .jpg speichern?

    Über deine entsprechende Anwendung (PHP-Software? Datenbank-Client?). Es ist nichts anderes als der Inhalt der JPG-Datei.

    * Ist es möglich, die .jpg Datei auch in der Datenbank zu bennen? (Beim Download heißt die jpg Datei jedes mal nur wie jene Spalte, aus der sie stammt.)

    Das ist die Aufgabe der entsprechenden Anwendung, die auf die Datenbank zugreift. Der Dateiname müsst als weitere Spalte gespeichert werden, beim "runterladen" dann ausgelesen werden und im HTTP-Response entsprechend untergebracht werden.

  • Danke erstmal für die Antwort! Auf die Sache mit dem Sternchen hätte ich ja echt kommen können...

    Meine Abfrage ergibt nun das folgende Ergebnis:

    Code
    tinytext_username_current
    username1234

    Ist es möglich, *nur* username1234 auszugeben? Möglich auch ohne Zeilenumbruch am Ende.


    ---


    Also einfach cat img.jpg und ab damit in die Datenbank.


    ---


    Also den Output der Anfrage einfach als img.jpg speichern und einfach umbennen. Dass ich das ganze in der shell umbennen kann, wusste ich, hatte ich auch vor. Nur wollte ich das ganze nochmal per phpmyadmin öffnen können, aber dann muss ich das wohl so machen, also mit der zusätzlichen Spalte.

  • Ist es möglich, *nur* username1234 auszugeben? Möglich auch ohne Zeilenumbruch am Ende.

    Klingt so als ob du über die CLI gehst mit mysql -e "SELECT ...", dann kannst du über die Parameter s und N zum einen das Grid ausblenden und zum anderen die Spaltennamen weglassen.


    Ein Bild in die Datenbank cat en könnte da komplizierter werden. Ich bin nicht so herausragend auf der bash, aber sinngemäß wäre folgendes möglich:

    Code: Pseudo-Code
    MYJPG='naked.jpg'
    CONTENT=`cat $MYJPG`
    mysql -u root -pPassword dbName < echo "INSERT INTO blobbyblob VALUES ($CONTENT);"

    // Edit: Oh, du möchtest es andersrum machen (also auslesen), dann einfach die Parameter von oben nemen und in deine Datei pipen:

    mysql -sN -e "SELECT ..." > naked.jpg

  • Sowohl als auch. Also ich möchte einfach content sowie metadaten mit dem Rootserver fetchen, diese werden dann in die DB sowie auf die Platte (besserer Zugriff, solange es kein Interface gibt) geschrieben. Ich möchte mir da natürlich die Möglichkeiten offen halten, die gesamten DB Inhalte auf die Platte zu ziehen, um das Script portabler zu machen. Außerdem ist so schonmal ein Backup vorhanden, da DB und Rootserver ja zwei Produkte sind.


    ---


    Ja, also das Grid war weg, als ich das ganze in eine Datei geschrieben hab. (mysql ... > file) Dann probiere ich mal den anderen Parameter. Ansonsten muss ich halt alles mit nem regex machen, nur dann werden die Scripte immer so lang und unübersichtlicher, je mehr dazukommt.

  • Ich bin jetzt an dem Punkt angelangt, dass ich den Inhalt einer Textdatei mit dem Inhalt einer Zelle aus der DB vergleichen möchte. Inhalte von Dateien rufe ich normaler mit $(<$datei) auf. Jedoch bereitet mir die Klammer in einem if-Statement Probleme:


    Code
    $(mysql --unwichtig';' -s -N -e'SELECT inhaltdb FROM tbl_users WHERE userid= $(<$inhaltfile)')
  • Werde das ganze wohl lösen, indem ich den mysql Command schon vorher auführe, in eine Datei leite und diese dann in im if-Statement aufrufe.

  • ich finde dein Projekt sehr mysteriös/undurchsichtig

    du speicherst userids in Dateien und jpgs in der DB

    Könntest du dein Projekt mal vorstellen?


    LG

    michi

    It's me, only me, pure michi 🦆

    RS 1000 SAS G8 | Cyber Quack

    VPS: 50 G7 |B Ostern 2017|200 | Karneval | piko

    WH: SmallEi | Adv17 Family |4000 SE|1000 SE

  • Also ich fetche Metadaten sowie den eigentlichen Content aus einer Api.


    Das heißt: Ich rufe das JSON File auf, ziehe mir dort die benötigten Parameter raus und rufe das nächste JSON File auf. Dort werden dann die Parameter in die DB geschrieben, sofern der Parameter anders als der in der DB ist. (Dasselbe gilt für den content, ist ja nur ne URL zu nem file, was dann halt runtergeladen wird.)


    Wenn ich mit dem Endergebnis zufrieden bin, kann ich dir das ganze mal per PM zukommen lassen. Könnte aber dauern

  • ich bin mir nicht sicher ob bash hierbei die passende Sprache ist. wieso nutzt du nicht Python, PHP oder Javascript (node)? die bieten allesamt eine einfachere Anbindung an Datenbanken und sind für deinen Zweck deutlich einfacher in der Handhabung ;)

  • Um das vorweg zu sagen: Ich bin weder Bash Profi noch kenne ich etwas anderes wie python etc. In Bash ist es halt so, dass es für mich relativ einfach ist, mir etwas zurechtzubasteln und die Einbindung von Dingen wie mysql geht ja auch über das einfache Installieren vom mysql-client.


    Ich persönlich kann nicht sagen, ob hier python die bessere Wahl wäre. Denn: Ich müsste mir das ganze vorher noch aneignen und dort ist vermutlich (für den Moment !!!) einfacher, dass ich das mit Bash löse.

    Also ich hatte das ungefähr so vor:


    - Ein Script (manuell) legt einen task in der db an, nachdem der User nach allen möglichen Werten dafür gefragt wurde. (u.A. instance)

    - Ein while script (als screen) durchsucht die db nach task Einträgen, die auf die jeweilige Instanz passen (um später ggf. das ganze aufzuteilen) und führt diese dann aus.

    - Es wird ein json File alle 24h runtergeladen: Es werden Metadaten in der DB aktualisiert (vergleiche json Eintrag mit db Eintrag) und je nach Bedarf die tasks aktualisiert. (zB neuer Benutzername (für html request erforderlich) wird eingetragen, kann aufgrund der alten userid noch gefunden werden)

    - In einer while Schleife wird alle X min/h für jeden User eine html Seite gefetched, wo ein String mit der db verglichen wird und bei Änderung wird der content runtergeladen und in der db sowie auf der Platte gespeichert.



    Das ganze soll vorerst auf dem RS laufen und die Daten werden nur via DB/SFTP aufgerufen. Später KÖNNTE ich mir vorstellen, ein wirklich einfaches php Interface dafür zu bauen: Muss ja nur Datensätze abfragen und nicht komplett scheisse aussehen.