【问题标题】:Codeigniter 'order_by' adds ordering by 'id' automaticallyCodeigniter 'order_by' 自动添加按 'id' 排序
【发布时间】: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


【解决方案1】:

嗯,根据我从你的问题中了解到的情况,这是完全正常的情况。

这只是数据库提供的排序系统的默认行为。在特定情况下,当数据按定义的属性完成排序时;在您的情况下,它是 DEFAULT 属性;然后,如果它遇到(几乎在所有实际情况中)该属性中具有相同值的条目,它将检查主 ID 以进行排序。因此,这就是为什么看起来查询的输出不正确的原因。

您可以尝试重新排列如下代码:

$this->db->select('*');
$this->db->from('tbl_languages');
$this->db->where("is_active",1);
$this->db->order_by('is_default','desc');
$query = $this->db->get();

请注意,我只更改了 WHERE 行和 ORDER_BY 行之间的位置

您还可以为排序添加更具体的属性。

但是,这只是我的假设。我认为您应该向我们展示您发现“错误”的部分数据和实际遇到的案例,以便我们进行更深入和更深入的分析。

谢谢。

【讨论】:

  • 谢谢,我已经编辑了我的问题。无论如何我试图改变元素的顺序,但结果是一样的
  • @user31929:这真是一个有趣的案例,我喜欢它。顺便说一句,我也使用与您相同的 CI 版本进行了测试。那个表中的数据条目怎么样,都是这些吗?我的意思是,你能展示你得到的输出不一致的真实情况吗?连同您拥有的 LANGUAGE 表中的数据条目
  • 这是真实案例表,仅此而已
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2011-04-07
  • 2021-10-02
  • 2019-01-14
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多