Php codeigniter获取mysql表,其中#u位于+;保留结果数组中键数组的顺序

Php codeigniter获取mysql表,其中#u位于+;保留结果数组中键数组的顺序,php,mysql,arrays,codeigniter,Php,Mysql,Arrays,Codeigniter,我有一个带有图像ID的字符串(从另一个mysql表获取) 并转换为数组: $idstring = "12, 18, 3, 392, 0, 9, 44"; $idarray = explode(',', $idstring); 基于这个id数组,我想从我的“media”mysql表中获取所有行 $result = $this->db->select('*') ->from('media') ->where_in('id', $ids) ->get()->res

我有一个带有图像ID的字符串(从另一个mysql表获取) 并转换为数组:

$idstring = "12, 18, 3, 392, 0, 9, 44";
$idarray = explode(',', $idstring);
基于这个id数组,我想从我的“media”mysql表中获取所有行

$result = $this->db->select('*')
->from('media')
->where_in('id', $ids)
->get()->result_array();
问题是
$result
数组的值的顺序很奇怪,如下所示:

$result's order : 44, 9 ,0 ,18 ,3 ,392 ,12 ...
但我需要它们保持我的$id字符串/数组顺序

到目前为止,我已经尝试了4种方法来解决这个问题:

  • 在循环中提取行而不使用
    where_in()
    -这会创建大量查询-但目前有效

  • 根据
    $idstring
    $idarray
    的顺序对
    $result
    数组重新排序,尽管我无法找到工作结果,也不明白为什么需要执行此步骤

  • 尝试修复查询本身。我听说过
    ORDER\u BY
    FIND\u IN\u SET
    $ids
    ,但我无法将其放入我的一个工作的codeigniter查询中,并且不知道这是否真的有帮助

  • 总之,我认为这应该是一项简单的日常任务,我只想用codeigniter按给定顺序获取一组图片

    我是否缺少一个简单的解决方案?

    使用mysql的
    Field()
    函数

    $result = $this->db->select('*')
                ->from('media')
                ->where_in('id', $ids)
                ->order_by("FIELD(id,".join(',',$ids).")")
                ->get()
                ->result_array()
    
    应该是这样的

    FIELD(id,12, 18, 3, 392, 0, 9, 44)
    

    返回逗号分隔列表的索引位置

    使用mysql的
    Field()
    函数

    $result = $this->db->select('*')
                ->from('media')
                ->where_in('id', $ids)
                ->order_by("FIELD(id,".join(',',$ids).")")
                ->get()
                ->result_array()
    
    应该是这样的

    FIELD(id,12, 18, 3, 392, 0, 9, 44)
    

    返回逗号分隔列表的索引位置


    可接受的答案应为M Khalid Junaid答案。但为了以防万一,如果您像我一样从数组生成,请按如下方式使用它:

    $result's order : 44, 9 ,0 ,18 ,3 ,392 ,12 ...
    
    $filters=[
    “订购人”=>[
    “title”=>“DESC”,
    “”字段(id),“.join(',',$ids)。”=>“”//该选项应为空。。。
    ]
    ];
    foreach($filters[“order_by”]作为$attribute=>$option){
    $this->db->order\u by($attribute,$option);
    }
    
    输出将是:

    。。。
    按“名称”描述的订单,字段(id,2017、2031、2032、2034、2035)
    限制50
    

    为了澄清起见。

    接受的答案应该是M Khalid Junaid答案。但以防万一,如果您是从像我这样的数组生成的,请像这样使用它:

    $result's order : 44, 9 ,0 ,18 ,3 ,392 ,12 ...
    
    $filters=[
    “订购人”=>[
    “title”=>“DESC”,
    “”字段(id),“.join(',',$ids)。”=>“”//该选项应为空。。。
    ]
    ];
    foreach($filters[“order_by”]作为$attribute=>$option){
    $this->db->order\u by($attribute,$option);
    }
    
    输出将是:

    。。。
    按“名称”描述的订单,字段(id,2017、2031、2032、2034、2035)
    限制50
    

    只是想澄清一下。

    $idstring
    可以用来代替
    加入(',',$idarray)
    @PhilippMaurer我想如果你想使用
    $idstring
    的话,这个
    字段(id,.$idstring.)“
    会有用的,非常感谢philipp和m khalid junaid。我让它工作了,并且学到了一些新的东西。我的直觉是正确的-必须有一个简单的方法:)
    $idstring
    可以用来代替
    加入(',',$idarray)
    @PhilippMaurer我想这个
    “字段(id,.$idstring.””)“
    如果你想使用
    $idstring
    的话就可以了,非常感谢philipp和m khalid junaid。我让它工作了,并且学到了一些新的东西。我的直觉是正确的——必须有一个简单的方法:)