у меня есть эта таблица:
LANGUAGES
ID NAME DEFAULT ACTIVE
1 English 0 1
2 Italian 1 1
3 Spanish 0 1
Порядок извлечения: все активные, но сначала по умолчанию, затем остальные. Я использую этот запрос внутри codeigniter:
public function get_languages_list() {
$array = array();
$this->db->select('*');
$this->db->from('languages');
$this->db->order_by('default','desc');
$this->db->where("active",1);
$query = $this->db->get();
foreach($query->result() as $row) {
$array[$row->id] = array();
$array[$row->id]["name"] = $row->name;
$array[$row->id]["default"] = $row->default;
$array[$row->id]["active"] = $row->active;
}
return $array;
}
, он работает правильно, но только в некоторых случаях. В других порядок не работает правильно. Я распечатал запросы в обоих случаях:
ПРАВИЛЬНЫЙ СЛУЧАЙ
SELECT * FROM `languages` WHERE `active` = 1 ORDER BY `default` DESC
СТРАННЫЙ СЛУЧАЙ
SELECT * FROM `languages` WHERE `active` = 1 ORDER BY `id`, `default` DESC
Codeigniter добавляет 'id
' в поведение order_by
. Способ, которым я вызываю этот запрос, всегда один и тот же, динамических параметров c нет, записи в БД одинаковы для обоих случаев, в любом случае результирующий запрос отличается. Я не могу найти ничего связанного с этой вещью в документах codeigniter. Как это возможно? Может это ошибка?
РЕДАКТИРОВАТЬ
Теперь я вставил полный метод, чтобы показать, что нет параметров или особых условий. Я также пробовал эту альтернативу в порядке элементов запроса:
$this->db->select('*');
$this->db->from('languages');
$this->db->where("active",1);
$this->db->order_by('default','desc');
$query = $this->db->get();
результат тот же. Я попытался добавить некоторые другие условия в order_by, но результат тот же.
РЕДАКТИРОВАТЬ 2
моя версия codeigniter:
CI-3.1.10