Переменная $filtersort выглядит так:
$filtersort = in_array($_POST['sort'],array('in_stock DESC,sort_order','in_stock >= 0 DESC,Price > 0 DESC,Price,name','in_stock >= 0 DESC,Price > 0 DESC,Price DESC,name'))?$_POST['sort']:'in_stock DESC,sort_order';
Запрос при установке хотя бы одной галки (по-моему в него никаких изменений не вносил):
$data = db_query("SELECT productID FROM (SELECT productID, COUNT(DISTINCT optionID) AS count FROM ".PRODUCTS_OPTIONS_SET_TABLE." JOIN ".PRODUCTS_TABLE." USING(productID) WHERE enabled=1 AND Price>=$price_from AND Price<=$price_to AND $addonCat$addonStock$addonSearch AND variantID IN (".implode(',',$search).") GROUP BY productID ORDER BY $filtersort) AS t WHERE t.count=$POSTcount");
Выборка товаров по параметрам происходит правильная, а вот сортируются неправильно. Попробовал сделать этот же запрос напрямую в phpmyadmin - все такой же разброд. Причем сразу после запроса порядок строк один, а после перехода на вторую страницу результатов и возврата на первую - он уже может измениться, а может и нет. Также и при повторном запросе (это все в phpmyadmin). Запрос делал такой (чуть модифицировал, чтобы было видно что к чему):
SELECT productID, in_stock, sort_order, Price FROM (SELECT productID, in_stock, sort_order, Price, COUNT(DISTINCT optionID) AS count FROM pwqk_product_options_set JOIN pwqk_products USING(productID) WHERE enabled=1 AND Price>=0 AND Price<=2895.5882352941 AND categoryID IN (21) AND variantID IN (131) GROUP BY productID ORDER BY Price) AS t WHERE t.count=1
А результат получается такой:
То есть получается, что сортировка происходит правильно, но в пределах некой части строк, в данном случае частями по 14 строк.
Пробовал на двух разных хостингах:
- Версия сервера: 5.6.39-83.1 - Percona Server (GPL), Release 83.1, Revision da5a1c2923f
- Версия сервера: 5.7.16-10-log - Percona Server (GPL), Release 10, Revision a0c7d0d