Ik heb een query waarmee ik alle producten binnen een prijsrange wil ophalen. Dat werkte prima voordat ik prijzen heb opgeslagen met commas erin.

Dit is mijn query:

SELECT   * 
FROM     ( 
   SELECT    cnt.id    AS content_id, 
			 cnt.title AS content_title, 
			 cnt.featured, 
			 cnt.ordering, 
			 cnt.alias AS content_alias, 
			 cnt.catid, 
			 cnt.images, 
			 cnt.state, 
			 cnt.introtext, 
			 cat.parent_id, 
			 cat.id    AS cat_id, 
			 cat.title AS cat_title, 
			 cat.alias AS cat_alias, 
			 Max( 
			 CASE 
					   WHEN f.field_id = 6 THEN f.value 
			 END) AS prijs, 
			 Max( 
			 CASE 
					   WHEN f.field_id = 7 THEN f.value 
			 END) AS prijsoud, 
			 Max( 
			 CASE 
					   WHEN f.field_id = 8 THEN f.value 
			 END) AS afbeelding 
   FROM      snm_categories cat 
   LEFT JOIN snm_content cnt 
   ON        cnt.catid = cat.id 
   AND       cnt.state = 1 
   LEFT JOIN snm_fields_values f 
   ON        cnt.id = f.item_id 
   WHERE     cat.parent_id = 8 
   GROUP BY  cnt.id, 
			 cnt.title, 
			 cnt.featured, 
			 cnt.alias, 
			 cnt.catid, 
			 cnt.images, 
			 cnt.state, 
			 cnt.introtext, 
			 cat.id, 
			 cat.title, 
			 cat.alias )t 
WHERE    prijs BETWEEN 154.95 AND      314.95 
AND      t.content_id IS NOT NULL 
ORDER BY ordering


De waardes in de database zijn (laagste en hoogste) 154,95 en 314,95, het aanpassen van de query naar commas werkt niet, dan stopt hij helemaal met werken. Zoals hij nu is zie ik via mijn prijsfilter alleen het product met de hoogste prijs, het product van 154,94 wordt niet getoond.

Hoe kan ik dit oplossen?
Ivo P op 18/02/2019 13:17:39

Joomla is webshop software.

Ik kan me niet voorstellen dat daarin de prijzen opgeslagen worden als tekst. Dat zou namelijk betekenen dat bij het optellen van de bedragen in je winkelmandje al rekening gehouden moet worden met alle opties die een beheerder kan hebben verzonnen om bedragen op te slaan:

- 4.95
- 4,95
- € 4.95
- € 4,95
- 495
- 4,95 EUR

Daar kun je nooit mee rekenen.
Weet je zeker dat het hier om het prijs-veld gaat en dat er niet een of ander veld van de product-beschrijving wordt misbruikt voor de prijs?

Het feit dat je werkt met field_id;-value paren, lijkt daar al op te wijzen.


Joomla is toch gewoon een CMS? Magento bedoel je denk ik.

En het is een tekstveld die ik zelf heb gemaakt, binnen Joomla heb je de mogelijkheid om custom fields aan te maken en die aan paginas te koppelen.
Volgende keer een numeriek veld maken. Misschien kan je het huidige veld wijzigen..

https://docs.joomla.org/Number_form_field_type

Een standaard input veld van type number accepteert zowel een decimale komma als een decimale punt.

Aan de serverkant worden beide een decimale punt.
ik dacht dat er ook een stuk webshop bij zat. Maar dat is niet zo.

In elk geval, wat hierboven ook gezegd wordt min of meer:
getallen moet je als getal opslaan.
Zonder nadere opmaak. Maar ook voor de database als getal.

Net zoals "z" groter is dan "aa" is "9" groter dan "11" als je het als een string beschouwd ipv een getal. En een varchar is een string.

Kun je aangeven dat het om getallen gaat?
Ivo P op 18/02/2019 15:52:06

ik dacht dat er ook een stuk webshop bij zat. Maar dat is niet zo.

In elk geval, wat hierboven ook gezegd wordt min of meer:
getallen moet je als getal opslaan.
Zonder nadere opmaak. Maar ook voor de database als getal.

Net zoals "z" groter is dan "aa" is "9" groter dan "11" als je het als een string beschouwd ipv een getal. En een varchar is een string.

Kun je aangeven dat het om getallen gaat?

Het is nu opgelost door het veld aan te passen naar een numeriek veld. Dus vergelijken tussen de getallen zou nu goed moeten werken.

Reageren