Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL SELECT mit IF ? (https://www.delphipraxis.net/36537-mysql-select-mit-if.html)

static_cast 21. Dez 2004 13:35


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:
SELECT * IF(mail='',mail,'No Mail') FROM images
Das geht aber nicht! :cry:

Hoffe ihr kömmt mir helfen,
Gruss Daniel

Stevie 21. Dez 2004 13:42

Re: MySQL SELECT mit IF ?
 
SQL-Code:
select ifnull(mail, 'No Mail') from images

Maa83 21. Dez 2004 13:43

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 :)

PRehders 21. Dez 2004 13:50

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:
select COALESCE (mail, 'no mail')...
Bei einer eventuellen Umstellung auf einen andere DB hast du dann eine Baustelle weniger!

Noch'n Tipp: Lieber immer alle gewünschten Felder aufzählen statt select *, das kann bei Struktur-Änderungen recht unangenehm werden...

Gruß

Peter

static_cast 21. Dez 2004 13:53

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:
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
Aber muss ich wirklich alle Felder auflisten? Wie läßtig wird das erst wenn ich mehr habe als die paar? Ohwei...

//Edit: Danke PRehders, das ist ja noch Einfacher :)

static_cast 21. Dez 2004 14:01

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

Stevie 21. Dez 2004 14:06

Re: MySQL SELECT mit IF ?
 
Zitat:

Zitat von static_cast
ich möchte einen SELECT auf eine Tabelle machen wo Spalten leer oder null sein können, aber in meinem Fall eher leer also ''.

:warn: '' <> NULL !!!

PRehders 21. Dez 2004 14:12

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

static_cast 21. Dez 2004 14:24

Re: MySQL SELECT mit IF ?
 
Zitat:

Zitat von Stevie
Zitat:

Zitat von static_cast
ich möchte einen SELECT auf eine Tabelle machen wo Spalten leer oder null sein können, aber in meinem Fall eher leer also ''.

:warn: '' <> NULL !!!

Das weiß ich wohl das NULL != '' ist, deswegen steht es da auch extra erwähnt "leer oder null sein können, aber in meinem Fall eher leer"! Wer lesen kann ist klar im Voteil ;) *g*

Zitat:

Zitat von PRehders
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...

Naja kann ich mich ja wohl kaum gegen wehren, wenn im Eingabefeld der Webform das Feld für die Mail vom User leer gelassen wird, ist es halt einfach leer aber nicht NULL.

Stevie 21. Dez 2004 14:30

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 07:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz