
63130
09.10.2008, aktualisiert am 14.10.2008
MySQL Query mit Wenn bzw. If Funktion?
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
Und zwar habe ich in einer Abfrage folgende Bedingung:
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:
Wenn 'firma' nicht leer dann
WHERE firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%'
sonst
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 98833
Url: https://administrator.de/forum/mysql-query-mit-wenn-bzw-if-funktion-98833.html
Ausgedruckt am: 22.04.2025 um 06:04 Uhr
11 Kommentare
Neuester Kommentar
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:
...
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%'))
OR
(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.
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:
SELECT *,
CASE WHEN firma='' THEN Nachname ELSE firma END AS OrderFeld
FROM vc_branchenbuch
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%'))
OR (firma ='' AND( nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%'))
ORDER BY OrderFeld ASC
Gruß L.
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 @63130:
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:
SELECT *, CONCAT(firma, Nachname) as OrderFeld
FROM vc_branchenbuch
WHERE (firma <>'' AND (firma LIKE 'a%' OR firma LIKE 'b%' OR firma LIKE 'c%'))
OR (firma ='' AND( nachname LIKE 'a%' OR nachname LIKE 'b%' OR nachname LIKE 'c%'))
ORDER BY OrderFeld ASC
Gruß L.