Page 1 of 1

Changing getProducts query behaviour

Posted: Sat Dec 19, 2015 6:33 am
by munkyfever
I'm using an ajax call to update the product listing on the category page when a filter is changed. It's all going well until you realise that the filter module uses getProducts() in the catelog/product model. This is currently spitting out this SQL:

Code: Select all

SELECT p.product_id
	,(
		SELECT AVG(rating) AS total
		FROM oc_review r1
		WHERE r1.product_id = p.product_id AND r1.STATUS = '1'
		GROUP BY r1.product_id
		) AS rating
	,(
		SELECT price
		FROM oc_product_discount pd2
		WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW()))
		ORDER BY pd2.priority ASC
			,pd2.price ASC LIMIT 1
		) AS discount
	,(
		SELECT price
		FROM oc_product_special ps
		WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))
		ORDER BY ps.priority ASC
			,ps.price ASC LIMIT 1
		) AS special
FROM oc_product_to_category p2c
LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id)
LEFT JOIN oc_product p ON (pf.product_id = p.product_id)
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id)
LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE pd.language_id = '1' AND p.STATUS = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '66' AND pf.filter_id IN (3,4)
GROUP BY p.product_id
ORDER BY p.sort_order ASC
	,LCASE(pd.NAME) ASC LIMIT 0
	,15
My issue is with this part pf.filter_id IN (3,4). If a product is associated with ANY of the selected filters it will be shown. I would expect the filters to allow a user to narrow down the number of products, for example all items that are coloured blue, round in shape and below a certain price. Only products that match all three of the criteria should be shown.

Does anyone have any experience with this? Have any suggestions for a cutom query? Or maybe I'm completely misinterpreting how the filters should be used.

Thanks in advance.

Edit: Obviously I am looking to create a new model, Opencart version 2.0.3.1.