Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MySQL IF Abfrage

Frage Entwicklung PHP

Mitglied: datadexx

datadexx (Level 1) - Jetzt verbinden

20.03.2013 um 19:36 Uhr, 5732 Aufrufe, 10 Kommentare, 1 Danke

Hallo Leutz,

ich hab wieder ein Problem mit einer MySQL Abfrage.

Ich möchte in einer Abfrage prüfen ob ein Feld leer ist (also '') und wenn es leer ist soll eine Abfrage von anderen Feldern durchgeführt werden. Ist es nicht leer sollen die Abfrage nicht ausgeführt werden. Die Abfrage hat auch noch nen Join.

Ein Beispiel:

SELECT xy,
CONCAT( xyz,WENN XYZ ='' abz,dfg abfragen sonst abz,dfg nicht abfragen und weiter machen),
txt,
sbs

FROM tabelle LEFT JOIN bla bla usw.
WHERE dies und das

Keinen Plan wie ich das machen soll.

Danke für Hilfe!!!!

Greetz
Mitglied: LianenSchwinger
20.03.2013 um 20:29 Uhr
Hallo,

um zu prüfen, ob ein Feld leer ist bedient man sich des NULL-Operators.
In Deinem Fall ohne viel bla bla:

01.
xyz IS NULL
G Jörg
Bitte warten ..
Mitglied: filippg
20.03.2013 um 20:36 Uhr
Hallo,

okay - und wo ist jetzt die Frage?
Bei Problemen bei der Verwendung der IF-Funktion würde ich die Referenz empfehlen:
http://dev.mysql.com/doc/refman/5.1/de/control-flow-functions.html

Auf NULL hat Jörg schon hingewiesen - aus Sicht einer DB gibt es "" (leere Zeichenkette) und NULL (kein Wert definiert).

Gruß

Filipp
Bitte warten ..
Mitglied: datadexx
20.03.2013 um 20:43 Uhr
Hab ich probiert, geht nicht. Das Problem ist das ich eine rückwärts Kompatibilität zu alten Daten benötige. Da gibt es das Feld Ladung in den alten Daten, welches durch die neuen inserts nicht mehr befüllt wird und somit leer bleibt. Es steht aber auch nicht Null drin. Es ist leer. Wenn ich Daten aus dem alten bestand betrachten will muss das Feld abgefragt werden, nicht aber die neuen Felder. Wenn ich den neuen Datenbestand Abfrage ist das Feld Ladung ja leer und nur dann sollen die neuen Felder abgefragt werden. Und das alles muss in einer select passieren.

Noch ne Idee jemand?
Bitte warten ..
Mitglied: LianenSchwinger
20.03.2013 um 20:50 Uhr
... wenn in einem Feld nichts drin steht dann steht da NULL drin. NULL ist nicht gleich Null oder 0!

Und bei der kruden Beschreibung soll einer schlau werden. Stehn die alten und neuen Daten in ein und der selben Tabelle?
Wenn ja dann mach einen JOIN mit sich selbst und prüft das Feld Ladung der gejointen Tabelle auf "IS NULL".

G Jörg
Bitte warten ..
Mitglied: exchange
20.03.2013 um 22:44 Uhr
Hallo,
nur mal zu Info, NULL und "" sind zwei paar Schuhe. Man kann sehr wohl in ein varchar Feld nichts reinschreiben. Das gehört sich aber nicht ;)

Es gibt Funktionen und Proceduren in MySQL. Damit solltest Du dich beschäftigen.

Gruß
Heiko
Bitte warten ..
Mitglied: nxclass
21.03.2013, aktualisiert um 08:54 Uhr
01.
SELECT 
02.
  IF(`xzy` IS NULL OR `xzy` = '', CONCAT( `abz`, `dfg` ), NULL ) AS 'myresult' 
03.
... 
04.
 
05.
/* entweder: */ 
06.
WHERE 
07.
  (`xzy` IS NULL OR `xzy` = '') 
08.
/* oder: */ 
09.
... 
10.
HAVING 
11.
  `myresult` IS NOT NULL
bin mir nicht sicher ob ich verstanden habe was Du möchtest - aber das Prinzip sollte klar sein.
Weiterhin würde ich dir empfehlen mit einem UPDATE die Daten auf einen einheitlichen Stand zu bringen.
Bitte warten ..
Mitglied: datadexx
21.03.2013 um 09:04 Uhr
Moin Jungs!

Die Daten stehen in der selben Tabelle. Ich versuche es mal so genau wie möglich zu beschreiben.

Die DB Tabelle nennt sich aauftrag wo durch ein Formular Daten zu einem Transportauftrag eingertragen werden.

In dem Formular gab es vorher das Eingabefeld "Ladung" wo z.B. sowas wie "17 H1 Pal. Saatgut 12000kg" eingetragen wurde. Dieser String landete in der DB im Feld "ladung" welches ein varchar ist.

Im Formular wurde das Feld "Ladung" mit neuen Eingabefeldern ersetzt und zwar durch "Anzahl", "Lademeter", "Lademittelart", "Warenart" und "Gewicht". Entsprechend wurden in der DB Tabelle aaauftrag 5 neue Felder eingefügt die gleichnamig heißen. Der Insert Befehl des Formulars befüllt nun nur noch die neuen Felder, nicht mehr das Feld "Ladung". Ein weiters Script generiert mit einer Select Abfrage aus den Daten der Tabelle aauftrag einen druckbaren Transportauftrag. Um auch noch die Transportaufträge der alten Version ansehen und ausdrucken zu können wird in der Selectabfrage das Feld "Ladung" benötigt + die neuen Felder. Die Daten der neuen Felder werden mit CONCAT zusammengeführt und es wird mit CASE abgefragt ob diese leer sind. Wenn leer wird nichts ausgegeben ansonsten der Inhalt des Feldes. Das muss so sein, da entweder im Formular Anzahl oder Lademeter angegeben wird und es soll nicht beides auf dem Transportauftrag stehen, denn mit dem Concat werden an Anzahl ein"x" angehangen und an Lademeter ein "ldm." und an Gewicht ein "kg".

Bisher sieht das so aus:

SELECT
posten.datum,
posten.transanr,
CONCAT ( posten.bezeichnung,'<br>', aauftrag.ladung,
CASE WHEN aauftrag.anzahl ='' THEN '' ELSE CONCAT(anzahl,'x&nbsp;'),
CASE WHEN aauftrag.ldm='' THEN '' ELSE CONCAT(ldm,'ldm&nbsp;'),
usw.

Funktionieren tut die Abfrage für Transportaufträge mit den neuen Daten, nicht aber für die wo die Daten noch im Feld "Ladung" stehen, dort bleibt die CONCAT abfrage leer, gibt also in der Druckversion nichts aus. Entferne ich die Abfrage für die neuen Felder wird mir der Inhalt des Feldes "Ladung" auch wieder angezeigt. Daher stammt die Idee die neuen felder nur abfragen zu lassen, wenn aauftrag.ladung leer ist und ansonsten nicht. Problem ist halt auch, dass das in die CONCAT rein muss da es sonst das Drucklayout zerschiesst. Also im CONCAT muss geprüft werden ob aauftrag.ladung leer ist, wenn ja die anderen Felder abfragen und wenn nicht leer nur aauftrag.ladung abfragen und den rest nach dem CONCAT.

Hoffe ich konnte es so genau wie möglich beschreiben, damit ihr was damit anfangen könnt.

Greetz
Bitte warten ..
Mitglied: LianenSchwinger
21.03.2013, aktualisiert um 09:20 Uhr
Hallo und guten Morgen,

mit dieser Beschreibung kann man zumindest etwas anfangen.

01.
SELECT posten.datum, 
02.
       posten.transanr, 
03.
       CONCAT (posten.bezeichnung,'<br>',  
04.
               CASE WHEN aauftrag.ladung IS NOT NULL  
05.
                    THEN aauftrag.ladung, 
06.
                    ELSE CASE WHEN aauftrag.anzahl IS NULL THEN '' ELSE CONCAT(anzahl,'x&nbsp;') END, 
07.
                         CASE WHEN aauftrag.ldm IS NULL THEN '' ELSE CONCAT(ldm,'ldm&nbsp;') END, 
08.
09.
10.
11.
               END) Text 
12.
 
13.
usw.
G Jörg
Bitte warten ..
Mitglied: nxclass
21.03.2013 um 09:24 Uhr
mh ...
01.
- CONCAT ( posten.bezeichnung,'<br>', aauftrag.ladung, 
02.
+ CONCAT ( posten.bezeichnung,'<br>', 
03.
+ CASE WHEN aauftrag.ladung = '' THEN CONCAT( /* deine neuen DB Felder */ ) ELSE aauftrag.ladung,
müsste doch dann auch gehen ?
Bitte warten ..
Mitglied: Bierkistenschlepper
29.03.2013 um 10:57 Uhr
HTML mit MySQL auszugeben ist extrem unprofessionell. Finger weg.
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
PHP
MySQL-Abfrage mit php: Wert + true bzw. false (2)

Frage von tomolpi zum Thema PHP ...

Datenbanken
gelöst MYSQL Abfrage (20)

Frage von datadexx zum Thema Datenbanken ...

Datenbanken
gelöst Row Number bei einer Abfrage sinnvoll einsetzen (1)

Frage von Aximand zum Thema Datenbanken ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...