Peter Nack: MySQL 5, SELECT MIN IF ueber mehrere Spalten

Guten Morgen allerseits,

ich sitze mal wieder vor einem SQL-Problem.

Ausgehend von folgendem Szenario:

Tabelle "room":

  • room_id
  • period1_price_p1
  • period1_price_p2
  • period1_price_p3
  • period1_price_p4
  • period2_price_p1
  • period2_price_p2
  • period2_price_p3
  • period2_price_p4

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

  1. 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

    1. 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