Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: datadexx

datadexx (Level 1) - Jetzt verbinden

20.03.2013 um 19:36 Uhr, 6522 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 ..
Ähnliche Inhalte
Datenbanken
MYSQL Abfrage
gelöst Frage von datadexxDatenbanken20 Kommentare

Halo an alle MySQL Spezialisten! Wie kann ich denn am besten folgende Werte abfragen und berechnen? Ausgang für die ...

PHP
PHP MySQL Abfrage aus Datenbank
Frage von Lost144PHP12 Kommentare

Hallo, Ich habe in einer Datenbank daten über VM's stehen. Angaben wie hostname,adresse, serverat usw. Wie kann ich in ...

Datenbanken
MYSQL Abfrage bereitet mir Probleme
gelöst Frage von datadexxDatenbanken43 Kommentare

Hallo Leute, ich habe wieder ein Problem mit einer SQL Abfrage. Ich habe eine Tabelle die nennt sich pbooking, ...

Datenbanken
(Prozent)s in einer MySQL-Abfrage
gelöst Frage von itebobDatenbanken4 Kommentare

Was bedeutet where nr=%s in einer MySQL-Abfrage? Sowas wie %s gehört bestimmt zu den MySQL-Grundlagen. In meinem Tutorial aber ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 2 TagenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 3 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

Netzwerkmanagement
Netzwerkmanagment im Haus mit Switch, Panel und pfsense
gelöst Frage von CorraggiounoNetzwerkmanagement13 Kommentare

hi zusammen, wir sind gerade dabei das ganze Haus bzw. die einzelnen Zimmer mit netzwerkdosen zu versorgen. Vom Keller ...

Vmware
Server 2008 r2 vmware terminalserver
Frage von MasterCVmware12 Kommentare

Guten Abend zusammen, ich hoffe , dass einer von euch mir weiterhelfen kann ,bei meinem kack Problem ! Ist ...

Google Android
Empfehlung: Android Ortungsapp
gelöst Frage von certifiedit.netGoogle Android12 Kommentare

Guten Morgen, grundsätzlich vorweg, ich wollte mich eben schlau machen, bzgl einer Ortungsapp, welche Androidbasiert einem anderen Androidsmartphone mitteilt, ...