CakePhp / Mysql query: laagste waarde uit twee velden vinden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RePlayer
  • Registratie: September 2003
  • Laatst online: 20-06 22:05
Ik ben bezig met een CakePhp website, en ik stuit op een relatief simpele query waar ik geen oplossing voor kan vinden.

Ik heb een tabel met de velden:
id,
prijs_normaal,
prijs_actie

Ik wil alle rijen selecteren, en daarbij de laagste prijs uit de velden prijs_normaal en prijs_actie pakken als het nieuwe veld: prijs_laagste, en daarop sorteren.

Wat is dé SQL-query om hiervoor te gebruiken?
Hoe kan ik dit het beste in CakePHP gebruiken? Een method met custom Query in de Model?

---


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Kijk eens naar MIN en GROUP BY ;)

We are shaping the future


Acties:
  • 0 Henk 'm!

  • RePlayer
  • Registratie: September 2003
  • Laatst online: 20-06 22:05
Als ik me niet vergis kan ik MIN() hier niet voor gebruiken. Daarmee zoek ik het record met de laagste waarde in een kolom. Dat is hier niet de bedoeling...

---


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Oh zo... je wilt 2 kolommen vergelijken en daar de laagste waarde van kiezen.

LEAST is your friend, denk ik.

We are shaping the future


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Bestaat LEAST() ook in MySQL? Zo ja, dan is dat je oplossing, zo nee, dan kun je met een CASE aan de slag:
SQL:
1
2
3
4
5
6
7
SELECT
  CASE
    WHEN prijs_normaal < prijs_actie THEN prijs_normaal
    ELSE prijs_actie
  END AS laagste_prijs
FROM
  tabelnaam;


Edit: Alex heeft 'em dus gevonden, zat ook al te zoeken... :?

[ Voor 11% gewijzigd door cariolive23 op 05-04-2010 18:54 ]


Acties:
  • 0 Henk 'm!

  • RePlayer
  • Registratie: September 2003
  • Laatst online: 20-06 22:05
Ik dacht (vreesde) al dat er zo'n simpele functie zou zijn, maar kon hem dus de hele middag niet vinden...

LEAST() alleen is onvoldoende als je ook velden met NULL hebt die je niet wilt laten zien. Ik heb het volgende gevonden:

code:
1
SELECT LEAST(price_month_regular, ifnull(price_month_action, 9999)) AS least FROM `cp_contracts` ORDER BY least


Bedankt voor jullie hulp!

[ Voor 3% gewijzigd door RePlayer op 05-04-2010 19:05 . Reden: Bedankt ]

---


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Gebruik COALESCE() hiervoor.

Acties:
  • 0 Henk 'm!

  • RePlayer
  • Registratie: September 2003
  • Laatst online: 20-06 22:05
Hoe ziet de query er dan uit? Ik kom er niet uit om COALESCE() en LEAST() juist te combineren..

---


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Vrij simpel, gewoon de ifnull weggooien:
SQL:
1
2
3
4
5
6
SELECT 
  LEAST(price_month_regular, COALESCE(price_month_action, 9999)) AS lowest 
FROM 
  cp_contracts
ORDER BY 
  lowest ASC;


Verder zou ik geen backticks ` gebruiken, ze zijn overbodig, geen SQL standard en spuuglelijk. Vooral dat laatste argument zou je moeten overtuigen ;)

Tipje: Geef bij een sortering altijd ASC of DESC aan, je kan je een ongeluk zoeken naar een foute sortering wanneer dit ontbreekt. Zorg er voor dat je concreet bent, dus gewoon zegt welke sortering je wilt hebben.
Pagina: 1