Frage ist gelöstMySQL Query mit Wenn bzw. If Funktion?
09.10.2008
08:51:53 Uhr3815 Aufrufe
11 Antworten
08:51:53 Uhr
11 Antworten
Noch nicht bewertet
Kann man in einer MySQL Abfrage eine Wenn bzw. If Anweisung angeben?
Und zwar habe ich in einer Abfrage folgende Bedingung:
Jetzt kommt noch eine Bedingung hinzu, so dass es theoretisch wie folgt lauten soll:
Allerdings konnte mir mein Büchlein über MySQL auch nicht weiter helfen. Könnt ihr mir vllt sagen ob und wie sowas möglich ist?
Viele Grüße,
Max
01.
WHERE firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%'Jetzt kommt noch eine Bedingung hinzu, so dass es theoretisch wie folgt lauten soll:
01.
Wenn 'firma' nicht leer dann 02.
WHERE firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%' 03.
sonst 04.
WHERE nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%'Allerdings konnte mir mein Büchlein über MySQL auch nicht weiter helfen. Könnt ihr mir vllt sagen ob und wie sowas möglich ist?
Viele Grüße,
Max
v3rtico schreibt am 09.10.2008 um 11:10:49 Uhr
Nein es klappt nicht. Zwar bekomme ich keine Fehlermeldung, doch auch keine Ausgabe :/
Kann mir da jemand helfen, wie ich CASE und WHERE richtig verknüpfen kann?
@mrtux: Produktionsdatenbank? Ich weiß nicht was du damit meinst. So eine Art "Testdatenbank" für die Entwicklung? Die Datenbank mit der ich zur Zeit arbeite ist die die bereits im Einsatz und "Live" ist da ich eigentlich nur eine kleine Anpassung machen wollte, die sich dann doch als komplizierter erwies. Aber wenn ich das mit dem CASE und WHERE noch hin bekomme dann sollte ich damit endlich fertig sein ;)
Kann mir da jemand helfen, wie ich CASE und WHERE richtig verknüpfen kann?
@mrtux: Produktionsdatenbank? Ich weiß nicht was du damit meinst. So eine Art "Testdatenbank" für die Entwicklung? Die Datenbank mit der ich zur Zeit arbeite ist die die bereits im Einsatz und "Live" ist da ich eigentlich nur eine kleine Anpassung machen wollte, die sich dann doch als komplizierter erwies. Aber wenn ich das mit dem CASE und WHERE noch hin bekomme dann sollte ich damit endlich fertig sein ;)
Logan000 schreibt am 09.10.2008 um 15:17:54 Uhr
Moin Moin
Ich sollte mir wirklich angewöhnen die Beiträge genauer zu lesen.
CASE funktioniert so nicht im WHERE part.
Deine WHERE Bedingung solltest Du auch mit AND/OR hinbekommen.
Etwas so:
Bei "firma <>''" soltest du evtl. auch auf NULL prüfen.
Auf diesem System testest Du meinen Code bitte nicht sondern auf einer Entwickungs (Test) DB.
Gruß L.
Ich sollte mir wirklich angewöhnen die Beiträge genauer zu lesen.
CASE funktioniert so nicht im WHERE part.
Deine WHERE Bedingung solltest Du auch mit AND/OR hinbekommen.
Etwas so:
01.
... 02.
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%')) 03.
OR 04.
(nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%')Bei "firma <>''" soltest du evtl. auch auf NULL prüfen.
Produktionsdatenbank? Ich weiß nicht was du damit meinst. So eine Art "Testdatenbank" für die Entwicklung?
Die Produktion ist das Echtsystem auf dem Real gearbeitet wird.Auf diesem System testest Du meinen Code bitte nicht sondern auf einer Entwickungs (Test) DB.
Gruß L.
v3rtico schreibt am 09.10.2008 um 15:37:26 Uhr
Das Problem ist das ist ne Branchenbuchdatenbank. Wenn die Firma angegeben ist, dann soll nur nach der Firma mit dem Buchstaben gesucht werden. Nur wenn keine Firma angegeben ist, soll der Nachname des Inhabers genommen werden. Das geht nicht mit der einfachen "OR" denn da würde er ja immer nach dem Namen suchen.
Also angenommen jemand will alle Buchstaben "M". Dann findet der "Annette Mustermann" und die "Maurer AG". Gibt es aber die "Glaser AG" mit dem Besitzer "Max Muster" dann soll er die nur bei "G" finden.
Also angenommen jemand will alle Buchstaben "M". Dann findet der "Annette Mustermann" und die "Maurer AG". Gibt es aber die "Glaser AG" mit dem Besitzer "Max Muster" dann soll er die nur bei "G" finden.
Logan000 schreibt am 09.10.2008 um 15:56:41 Uhr
Moin
Gruß L.
Das geht nicht mit der einfachen "OR" denn da würde er ja immer nach dem Namen suchen.
Stimmt, also besser so:01.
... 02.
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%')) 03.
OR 04.
(firma ='' AND( nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%'))Gruß L.
v3rtico schreibt am 10.10.2008 um 09:08:16 Uhr
Ah Danke, jetzt funktioniert das. Nur mit der Sortierung gibts noch ein paar Probleme. Meine Query sieht jetzt so aus:
Und zwar zeigt er mir jetzt zuerst alle Einträge ohne Firma mit A, B und C im Nachnamen an und danach alle mit A, B und C in der Firma. Kann man die noch so sortieren, dass er mir alle Einträge nach den Buchstaben sortiert, egal, ob der Buchstabe im Name oder in der Firma steht?
Viele Grüße,
v3rtico aka Max
01.
SELECT * 02.
03.
FROM vc_branchenbuch 04.
05.
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%')) 06.
OR (firma ='' AND( nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%')) 07.
08.
ORDER BY firma, nachname ASCUnd zwar zeigt er mir jetzt zuerst alle Einträge ohne Firma mit A, B und C im Nachnamen an und danach alle mit A, B und C in der Firma. Kann man die noch so sortieren, dass er mir alle Einträge nach den Buchstaben sortiert, egal, ob der Buchstabe im Name oder in der Firma steht?
Viele Grüße,
v3rtico aka Max
Logan000 schreibt am 10.10.2008 um 13:39:53 Uhr
Moin Moin
Du kannst nur pro Feld sortieren und bei mehreren Felder eine Rangfolge festlegen.
Es wäre natürlich möglich in deiner Abfrage ein Sortierfeld zu generieren.
z.B. so in der Art:
Gruß L.
Kann man die noch so sortieren, dass er mir alle Einträge nach den Buchstaben sortiert, egal, ob der Buchstabe im Name oder in der Firma steht?
Erstmal: Nein.Du kannst nur pro Feld sortieren und bei mehreren Felder eine Rangfolge festlegen.
Es wäre natürlich möglich in deiner Abfrage ein Sortierfeld zu generieren.
z.B. so in der Art:
01.
SELECT *, 02.
CASE WHEN firma='' THEN Nachname ELSE firma END AS OrderFeld 03.
FROM vc_branchenbuch 04.
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%')) 05.
OR (firma ='' AND( nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%')) 06.
ORDER BY OrderFeld ASCGruß L.
v3rtico schreibt am 14.10.2008 um 09:05:09 Uhr
Das hab ich probiert. Sobald ich aber die CASE Anweisung einfüge, werden mir gar keine Einträge ausgegeben. Ich hab da schon mit allem möglichen rumprobiert mit dem Orderfeld aber habs nicht hinbekommen.
Kann man das CASE Feld irgendwie anders erstellen?
Viele Grüße,
v3rtico aka Max
Kann man das CASE Feld irgendwie anders erstellen?
Viele Grüße,
v3rtico aka Max
Logan000 schreibt am 14.10.2008 um 16:23:35 Uhr
Moin Moin
Wegen der genauen Syntax mus ich daher nochmal auf diesen Link verweisen.
Als Alternative zum CASEfällt mir nur noch sowas ein:
Einfach beide Felder als Textverketten und das Ergebnis sortieren.
Gruß L.
Zitat von v3rtico:
Das hab ich probiert. Sobald ich aber die CASE Anweisung einfüge,
werden mir gar keine Einträge ausgegeben. Ich hab da schon mit
allem möglichen rumprobiert mit dem Orderfeld aber habs nicht
hinbekommen.
Kann man das CASE Feld irgendwie anders erstellen?
Nun meine Code Beispiele sind natürlich alle ungetestet, da ich keine keine MySQL DB zur Hand habe.Das hab ich probiert. Sobald ich aber die CASE Anweisung einfüge,
werden mir gar keine Einträge ausgegeben. Ich hab da schon mit
allem möglichen rumprobiert mit dem Orderfeld aber habs nicht
hinbekommen.
Kann man das CASE Feld irgendwie anders erstellen?
Wegen der genauen Syntax mus ich daher nochmal auf diesen Link verweisen.
Als Alternative zum CASEfällt mir nur noch sowas ein:
01.
SELECT *, CONCAT(firma, Nachname) as OrderFeld 02.
FROM vc_branchenbuch 03.
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%')) 04.
OR (firma ='' AND( nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%')) 05.
ORDER BY OrderFeld ASCGruß L.







