Sascha: [MYSQL] SELECT IF - Neues SQL Statement als Ergebnis?

Guten Abend,

In MySQL ist folgendes Konstrukt möglich SELECT IF(Vergleich, 'wahr', 'falsch')

Normalerweise wird hier ein String zurückgegeben. Ist es stattdessen auch möglich eine neue SQL Abfrage zu starten?

Grüße,

Sascha

  1. Guten Abend,

    Hallo,

    Schon mal im Handbuch nachgelesen?

    Ciao und Gute Nacht!
    Frank

  2. moin,

    Normalerweise wird hier ein String zurückgegeben. Ist es stattdessen auch möglich eine neue SQL Abfrage zu starten?

    was du haben willst klingt nach dynamischen sql. mit reinem sql ist das nicht zu machen, ein statement bliebt dabei immer gleich und verändert sich nicht. du musst also entweder deine abfrage so aufbauen, dass sie dir das gewünschte ergebnis auf allen möglichen daten liefert. oder aber du musst die prozudurale erweiterung deines dbms nutzen, zum beisiel PL/SQL bei oracle oder T-SQL bei mssql. inwieweit mysql das kann/unterstützt kann ich dir aber nicht sagen, aber schaue dir mal den link an:

    http://dev.mysql.com/doc/refman/5.1/de/stored-procedures.html

    oftmals läßt sich aber das problem mit einem geschicktem sql statement lösen, so dass man, vielleicht kannst du ein wenig mehr ins detail gehen, was genau du machen willst.

    Ilja

    1. oftmals läßt sich aber das problem mit einem geschicktem sql statement lösen, so dass man, vielleicht kannst du ein wenig mehr ins detail gehen, was genau du machen willst.

      Ilja

      Ich möchte überprüfen, ob zu den eingegebenen Benutzerdaten (Nick / PW) ein Datensatz in der DB existiert. (SELECT xyz FROM user WHERE nickname = 'name' AND password = 'md5_hash'). Gleichzeitig möchte ich das Feld "last_login" des gefundenen Datensatzes mit dem aktuellen unix_timestamp versehen.

      Beides geschieht momentan in separaten DB-Anfragen. Nun suche ich eine elegante Möglichkeit dies in einer Anfrage zu kombinieren.

      @Frank

      Das Handbuch habe ich gelesen. Ich habe gehofft, dass jemand sagt "mit IF geht das nicht, aber mit XY".

      1. Du möchtest LESEN und SCHREIBEN in einer einzigen Abfrage? Das ist praktisch nicht möglich, soweit mir bekannt. Mein Vorschlag, bleib bei zwei Abfragen (eine zum Lesen und eine zum Update, wenn das Login erfolgreich war). Was erhoffst du dir eigentlich davon, dass du beides in einer SQL Abfrage machst? Performancevorteile?

        Gruss, Frank

        1. Du möchtest LESEN und SCHREIBEN in einer einzigen Abfrage? Das ist praktisch nicht möglich, soweit mir bekannt. Mein Vorschlag, bleib bei zwei Abfragen (eine zum Lesen und eine zum Update, wenn das Login erfolgreich war). Was erhoffst du dir eigentlich davon, dass du beides in einer SQL Abfrage machst? Performancevorteile?

          Gruss, Frank

          Im Prinzip möchte ich LESEN und SCHREIBEN in einer Anfrage kombinieren.

          Performancegwinne sind nicht das primäre Ziel. Vielmehr möchte ich meinen Quellcode so gut es geht komprimieren bzw. alles sauber strukturiert in eine Anfrage packen.

          Gruß, Sascha

          1. yo,

            Im Prinzip möchte ich LESEN und SCHREIBEN in einer Anfrage kombinieren.

            nein, du willst ein update der timestamp spalte mit dem nicknamen und dem passwort in der WHERE klausel machen und dann im programm auswerten, wieviele datensätze davon betroffen waren. kein datensatz, kombination aus passwort und nickname nicht vorhanden, ein datensatz, es passt, mehr als ein datensatz deutet auf einen fehlenden constraint hin.

            Performancegwinne sind nicht das primäre Ziel. Vielmehr möchte ich meinen Quellcode so gut es geht komprimieren bzw. alles sauber strukturiert in eine Anfrage packen.

            dabei muss man immer aufpassen. unnützes sicherlich über board werfen, aber sinvolle dinge behalten. manchmal sind zwei abfragen besser als eine komplexe....

            Ilja

            1. Im Prinzip möchte ich LESEN und SCHREIBEN in einer Anfrage kombinieren.

              nein, du willst ein update der timestamp spalte mit dem nicknamen und dem passwort in der WHERE klausel machen und dann im programm auswerten, wieviele datensätze davon betroffen waren. kein datensatz, kombination aus passwort und nickname nicht vorhanden, ein datensatz, es passt, mehr als ein datensatz deutet auf einen fehlenden constraint hin.

              ?? :) Eine Auwertung wie viele Datensätze davon betroffen sind will ich gar nicht durchführen. Denn es wird nicht möglich sein, dass mehrere Nutzer mit dem gleichen Nick registriert sind. Dies wird im Vorfeld schon ausgeschlossen bzw. überprüft.

              Ich will zusätzlich zur Prüfung, ob ein Nutzer existiert, auch Daten des Nutzers abrufen. Mindestens seine ID. Zeitgleich soll der Timestamp (last_login) aktuallisiert werden.

              Performancegwinne sind nicht das primäre Ziel. Vielmehr möchte ich meinen Quellcode so gut es geht komprimieren bzw. alles sauber strukturiert in eine Anfrage packen.

              dabei muss man immer aufpassen. unnützes sicherlich über board werfen, aber sinvolle dinge behalten. manchmal sind zwei abfragen besser als eine komplexe....

              Ilja

              Das kann durchaus sein. Ich dachte mir, dass es da vielleicht etwas Elegantes gibt.

              1. Guten Abend,

                Das kann durchaus sein. Ich dachte mir, dass es da vielleicht etwas Elegantes gibt.

                Wozu Eleganz? Das ist kein Ballett.

                So wie ich es bisher verstanden habe, du möchtest

                • einerseits den sich anmeldenden Benutzer verifizieren
                • andererseits Informationen über den sich anmeldenden Benutzer abrufen
                  (das könnte man dennoch in einer Abfrage schaffen)
                • und ganz andererseits statistische Informationen für den Benutzer erzeugen/ändern

                Für mich sind dies zwei logisch unabhängige Dinge, die auch getrennt bleiben sollten. Komplexe Dinge sollten durch Zerlegung einfacher (überschaubar, lösbar, wartbar) werden.

                Deine Aussagen "Quellcode so gut es geht komprimieren" und "sauber strukturieren" stehen in einem gewissen Widerspruch, zumindest für mich.

                Cheers, Frank

                1. Guten Abend,

                  Für mich sind dies zwei logisch unabhängige Dinge, die auch getrennt bleiben sollten. Komplexe Dinge sollten durch Zerlegung einfacher (überschaubar, lösbar, wartbar) werden.

                  Gut. Dann werde ich die beiden Abfragen getrennt stehen lassen.

                  Deine Aussagen "Quellcode so gut es geht komprimieren" und "sauber strukturieren" stehen in einem gewissen Widerspruch, zumindest für mich.

                  Cheers, Frank

                  "So gut es geht" bedeutet ja nicht "auf Teufel komm raus". Sagen wir es mal so - Ich suche den goldenen Mittelweg.