Появилась такая идея - сортировать все товары еще до всех стандартных сортировок (которые по имени, модели, цене и тп) по полю location, чтобы сначала выводились именно те товары, которые есть прямо сейчас на нашем складе. Я догадываюсь, что нужно в ф-цию getProducts куда-то вставить ORDER BY p.location. Добавил в $sort_data = array( строчку
'p.location' => 'location',
потом заменил это
if(isset($data['sort']) && array_key_exists($data['sort'], $sort_data)) {
$data['sort'] = $sort_data[$data['sort']];
if($data['sort'] == 'name' || $data['sort'] == 'model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY sort_order";
}
на это
if(isset($data['sort']) && array_key_exists($data['sort'], $sort_data)) {
$data['sort'] = $sort_data[$data['sort']];
if($data['sort'] == 'name' || $data['sort'] == 'model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} else {
$sql .= " ORDER BY LCASE(location) DESC, " . $data['sort'];
}
} else {
$sql .= " ORDER BY sort_order";
}
при этом вроде бы заработало для сортировки по умолчанию. Но я не пойму, почему работает так, а не с добавлением того же условия в конец, где $sql .= " ORDER BY sort_order"; ведь это и должна быть дефолтная сортировка по полю sort_order.
Что я делаю не так?