[MYSQL] SELECT IF - Neues SQL Statement als Ergebnis?
Sascha
- datenbank
0 Frank (no reg)0 Ilja0 Sascha0 Frank (no reg)0 Sascha0 Ilja0 Sascha0 Frank (no reg)0 Sascha
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
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
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".
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
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
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
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.
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
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
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.