Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 编码点火器';订单由';添加按';id';自动地_Php_Mysql_Codeigniter - Fatal编程技术网

Php 编码点火器';订单由';添加按';id';自动地

Php 编码点火器';订单由';添加按';id';自动地,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有这张桌子: 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-&

我有这张桌子:

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 
奇怪的情况

SELECT * FROM `languages` WHERE `active` = 1 ORDER BY `default` DESC 
SELECT * FROM `languages` WHERE `active` = 1 ORDER BY `id`, `default` DESC 
Codeigniter通过行为在顺序中添加“
id
”。 我调用此查询的方式总是相同的,没有动态参数,两种情况下的db记录都是相同的,无论如何,结果查询是不同的。 我在codeigniter文档中找不到任何与此相关的内容。 这怎么可能?可能是虫子吗

编辑

现在,我插入了checomplete方法,以表明没有参数或特殊条件。 我还按查询元素的顺序尝试了此选项:

$this->db->select('*');
$this->db->from('languages');
$this->db->where("active",1);
$this->db->order_by('default','desc');
$query = $this->db->get();
结果是一样的。 我试着添加一些其他条件,但结果是一样的

编辑2

我的codeigniter版本:

CI-3.1.10

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

这只是数据库提供的排序系统的默认行为。在特定情况下,当数据已按定义的属性完成排序时;在您的情况下,它是默认属性;然后,如果它遇到(几乎在所有实际情况下)该属性中具有相同值的条目,它将检查排序的主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_之间的位置

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

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


谢谢。

您能发布调用模型方法的代码块吗??调用此方法时是否传递任何适用的参数或条件??嗨,没有参数传递给该方法。不管怎样我都会编辑这个问题我至少试了500次。我没有遇到这个案子。我在CI-3.1.9上试过这个。你的是什么?谢谢,我的版本是CI-3.1.10谢谢,我已经编辑了我的问题。无论如何,我试图改变元素的顺序,但结果是same@user31929字体这真是一个有趣的案例,我喜欢它。顺便说一句,我也使用相同的CI版本进行了测试。该表中的数据条目怎么样,都是吗?我的意思是,你能展示你得到的不一致输出的真实情况吗?连同您拥有的语言表中的数据项,这是真实的案例表,仅此而已