login  Naam:   Wachtwoord: 
Registreer je!
 Forum

where statement probleempje

Offline Realtec - 04/08/2011 18:25
Avatar van RealtecHTML interesse Hey sima's,

Ik ben bezig met een systeem waar webshops in opgeslagen worden.
Voor deze webshops kunnen reviews geschreven worden en gewaardeerd worden met een score.
Als er geen waardering gegeven is aan een webshop heeft deze een waarde "NULL" in de database, is er wel een waardering gegeven dan heeft deze een getal tussen de 0 en 5.

Maar het probleem zit hem nu in het filter systeem.
Met deze filters kun je o.a. op waardering filteren maar zodra ik mijn slider op een range zet van 0 - 5 geeft hij de webshops niet weer die waardering "NULL" hebben.

filter functie:
  1. public function getShopsByHash($filterhash)
  2. {
  3. $hashQuery = Doctrine::getTable('Model_Filters')->findOneBy('hash', $filterhash);
  4. $hashResult = $hashQuery->toArray();
  5.  
  6. if(count($hashResult))
  7. {
  8. $q = Doctrine_Query::create()
  9. ->from('Model_Shopentries as entry')
  10. ->leftJoin('entry.Model_Shopitems as item')
  11. ->where('item.isActive = 1');
  12. $if($hashResult['catID'] != null)
  13. $q->andWhere('entry.catID = ?', $hashResult['catID']);
  14. if($hashResult['brandID'] != null)
  15. $q->andWhere('entry.brandID = ?', $hashResult['brandID']);
  16. if($hashResult['min'] != null)
  17. $q->andWhere('ROUND(item.averageRating) >= ?', $hashResult['min']);
  18. if($hashResult['max'] != null)
  19. $q->andWhere('ROUND(item.averageRating) <= ?', $hashResult['max']);
  20.  
  21. $q->groupBy('entry.shopID');
  22.  
  23. return $q->fetchArray();
  24. }
  25. else
  26. {
  27. die('Niks gevonden met hash.');
  28. }
  29. }


Het gaat nu mis bij de controle met $hashResult['min'].
De slider heeft altijd een waarde van 0 t/m 5 deze waardes zijn de min en max in het filter tabel.
Aangezien 0 niet gelijk staat aan NULL werkt mijn where statement niet.
De vraag is nu hoe ik het op kan lossen als ik minimale waardering op 0 heb staan dat hij ook de filter rijen sellecteerd die "NULL" bevatten.

Ik hoop dat ik het een beetje duidelijk uitgelegd heb.
Een voorbeeld is te zien op http://realtec.getmyip.com

Als je bij categorie "vrouwen kleding" kijkt staat er wel een webshop "Blondie Fashion" die geen review heeft en dus waarde "NULL" heeft als waardering.

2 antwoorden

Gesponsorde links
Offline MiST - 04/08/2011 19:10 (laatste wijziging 04/08/2011 19:18)
Avatar van MiST Lid Voeg een if-test toe om te checken of de slider op nul staat en voeg een Where clause toe om objecten met waardering NULL op te halen in dat geval.

Of, laat de score van je rij eerst parsen naar een integer in MySQL. Er is wellicht een functie die eender welke "string" naar een integer kan parsen...

Edit: COALESCE functie kan dit bijvoorbeeld oplossen.

  1. WHERE COALESCE(rating,0) >= min
  2. AND WHERE COALESCE(rating,0) <= max


COALESCE geeft eerste niet-null resultaat terug uit een rij, dus dit zal ofwel je score geven als je er een hebt, of 0 als er NULL opgegeven staat 
Bedankt door: Realtec
Offline Realtec - 05/08/2011 06:36
Avatar van Realtec HTML interesse Deze functie werkt prima en doet precies wat ik wil!
Bedankt 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.191s