MySQL 5, SELECT MIN IF ueber mehrere Spalten
Peter Nack
- datenbank
Guten Morgen allerseits,
ich sitze mal wieder vor einem SQL-Problem.
Ausgehend von folgendem Szenario:
Tabelle "room":
Fuer ein Zimmer koennen fuer jeweils zwei verschiedene Perioden vier verschiedene Preise (1-4 Personen) angegeben werden.
Mein Ziel ist es, aus diesen acht optionalen Werten den niedrigsten zu ermitteln.
Bisher war es so, dass ich meine Abfrage auf zwei Preise beschraenken konnte. Hierfuer habe ich folgendes Query genommen:
SELECT
MIN(
if(
room.period1_price_p1 < room.period2_price_p1,
room.period1_price_p1,
room.period2_price_p1
)
) as lowest_price
FROM
room
Erstens:
Doch wie kann ich das jetzt wie oben beschrieben erweitern, ohne auf dutzend in sich verschachtelte If-Abfragen zugreifen zu muessen (falls das ueberhaupt moeglich ist)?
Zweitens:
Zudem moechte ich gerne, dass das MIN einen NULL-Wert nicht als minimalen Wert sieht, sondern im Falle eines NULLS den entsprechenden anderen/naechst hoeheren Wert zurueckliefert. Gibt es auch hierfuer was Schickes?
Bin fuer jeden Tip dankbar!
MfG
Peter Nack
Hi,
also wie ich den geringsten Wert mehrerer Spalten abfragen kann, habe ich nun rausbekommen.
SELECT
least( room.period1_price_p1, room.period2_price_p1, [..] )
as lowest_price
FROM
room
Nun bleibt noch die Frage offen, wie ich hier die NULL-Werte herausfiltern kann...
MfG
Peter Nack
Hallo nochmals,
also folgendes Query fuehrt mich nun zum ziel:
SELECT MIN(
LEAST(
IF( room.period1_price_p1, room.period1_price_p1, "n/a" ) ,
IF( room.period1_price_p2, room.period1_price_p2, "n/a" ) ,
IF( room.period1_price_p3, room.period1_price_p3, "n/a" ) ,
IF( room.period1_price_p4, room.period1_price_p4, "n/a" ) ,
IF( room.period2_price_p1, room.period2_price_p1, "n/a" ) ,
IF( room.period2_price_p2, room.period2_price_p2, "n/a" ) ,
IF( room.period2_price_p3, room.period2_price_p3, "n/a" ) ,
IF( room.period2_price_p4, room.period2_price_p4, "n/a" )
))
FROM room
WHERE resort_id = 2
Aber ob das jetzt die schoenste Variante ich, mag (kann) ich nicht beurteilen.
MfG
Peter Nack