Попробуйте этот код, он поможет вам
Ваш последний заказ по коду неверен - удалите это
$sql .= " ORDER BY p.quantity<1, LCASE(" . $data['sort'] . ")";
Сделайте это ниже
до
$sql .= " GROUP BY p.product_id";
поставить этот код
$sql .= " AND p.quantity > 0";
Вы должны прокомментировать этот код для Количество больше нуля
/* comment this code
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} elseif ($data['sort'] == 'p.price') {
$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY p.sort_order";
}
*/
и добавить это
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY p.quantity, LCASE(" . $data['sort'] . ")";
} elseif ($data['sort'] == 'p.price') {
$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
} else {
$sql .= " ORDER BY p.quantity, " . $data['sort'];
}
} else {
$sql .= " ORDER BY p.quantity, p.sort_order";
}