![]() |
MySQL SELECT mit IF ?
Hi,
habe ein prob bei einem MySQL Statement, ich möchte einen SELECT auf eine Tabelle machen wo Spalten leer oder null sein können, aber in meinem Fall eher leer also ''. Mein Bsp.: z.B. die Spalten: NAME FOO BAR MAIL und DATUM nun folgendes Statement "SELECT * FROM tabelle", ABER ich möchte das er wenn MAIL = '' ist dort 'No Mail' in die Spalte packt beim Result! Hab ich etwas in der MySQL Doku gelesen und was über IF gefunden. Kam ich also auf die Idee:
Code:
Das geht aber nicht! :cry:
SELECT * IF(mail='',mail,'No Mail') FROM images
Hoffe ihr kömmt mir helfen, Gruss Daniel |
Re: MySQL SELECT mit IF ?
SQL-Code:
select ifnull(mail, 'No Mail') from images
|
Re: MySQL SELECT mit IF ?
im Select Statement kannst du Case benutzen:
SELECT *, CASE WHEN mail='' THEN 'No Mail' ELSE mail END AS mail FROM images statt * alle Felder bis auf Mail aufzählen! oh... Stevie war schneller und mit einer anderen Idee :) |
Re: MySQL SELECT mit IF ?
Hallo,
der SQL-Standard sieht hierfür die Funktion COALESCE vor; diese gibt aus den übergebenen (beliebig vielen) Parametern den ersten zurück, der nicht NULL ist:
SQL-Code:
Bei einer eventuellen Umstellung auf einen andere DB hast du dann eine Baustelle weniger!
select COALESCE (mail, 'no mail')...
Noch'n Tipp: Lieber immer alle gewünschten Felder aufzählen statt select *, das kann bei Struktur-Änderungen recht unangenehm werden... Gruß Peter |
Re: MySQL SELECT mit IF ?
Hey danke euch zwei, geht wunderbar! :)
Hab es jetzt so, da konnte ich ja gleich noch die abfrage auf NULL mit einbaun =)
SQL-Code:
Aber muss ich wirklich alle Felder auflisten? Wie läßtig wird das erst wenn ich mehr habe als die paar? Ohwei...
SELECT idx, sortkey, filename, hashname, hash, owner,
CASE WHEN ( mail = '' ) OR ( mail = NULL ) THEN 'No Mail' ELSE mail END AS mail, description, deletekey, size, uploadtime, ip, listingkey, insertmode FROM images //Edit: Danke PRehders, das ist ja noch Einfacher :) |
Re: MySQL SELECT mit IF ?
Naja... irgendwie geht das mit dem COALESCE gar nicht die Felder werden trozdem als leer zurückgeliefert, kann es sein das das nur bei NULL Feldern anwendbar ist?
SQL-Code:
SELECT idx, sortkey, filename, hashname, hash, owner, COALESCE( mail, 'No Mail' ) , description, deletekey, size, uploadtime, ip, listingkey, insertmode FROM images
|
Re: MySQL SELECT mit IF ?
Zitat:
|
Re: MySQL SELECT mit IF ?
Hallo,
da hatte ich wohl nicht so ganz geschnallt... COALESCE bearbeitet NULL-Werte; wenn bei dir aber ein leerer String drinsteht, ist dies natürlich nicht NULL und er bringt den Feldwert raus. Eine solche Datenkonstellation sollte man aber tunlichst beim Befüllen der DB vermeiden, denn wenn das Feld leer ist, ist doch wohl eigentlich NULL gemeint... Aber dann musst Du es wohl doch mit den anderen Konstrukten probieren. Gruß Peter |
Re: MySQL SELECT mit IF ?
Zitat:
Zitat:
|
Re: MySQL SELECT mit IF ?
Das war auch eher an die anderen gerichtet, die - wie ich - auf der Null-Schiene waren. :oops:
Du könntest also über einen Standardwert das (Nicht-)Befüllen mit NULL verhindern und dann das Case-Konstrukt in der Abfrage benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz