【发布时间】:2020-03-04 15:02:19
【问题描述】:
我有这张桌子:
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 在order_by 行为中添加了“id”。
我调用这个查询的方式总是一样的,没有动态参数,两种情况下的数据库记录都是一样的,无论如何结果查询是不同的。
我在 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
【问题讨论】:
-
能否贴出调用模型方法的代码块??调用此方法时是否传递了任何参数或任何适用的条件??
-
嗨,没有参数传递给该方法。无论如何我都会编辑问题
-
我至少尝试了 500 次。这个案子没有发生在我身上。我在 CI-3.1.9 上试过这个。你的是什么?
-
谢谢,我的版本是CI-3.1.10
标签: php mysql codeigniter