Mysql Codeigniter中Ajax数据表的自然排序
正在努力找出如何使用Codeigniter活动记录在AJAX数据表中设置自然排序。 在大多数情况下,应该排序的字段只有数字……在其他情况下是字符串,因此MySQL表字段设置为VARCHAR 我需要srt数据表中要显示的字段 Active record Codeigniter查询如下所示Mysql Codeigniter中Ajax数据表的自然排序,mysql,codeigniter,activerecord,natural-sort,Mysql,Codeigniter,Activerecord,Natural Sort,正在努力找出如何使用Codeigniter活动记录在AJAX数据表中设置自然排序。 在大多数情况下,应该排序的字段只有数字……在其他情况下是字符串,因此MySQL表字段设置为VARCHAR 我需要srt数据表中要显示的字段 Active record Codeigniter查询如下所示 function list_all($limit,$start,$col,$dir) { $this->rmi_db->select (" $this->tabl
function list_all($limit,$start,$col,$dir)
{
$this->rmi_db->select ("
$this->table_dev.id,
$this->table_dev.fl,
$this->table_dev.mm,
$this->table_dev.batch,
$this->table_dev.n,
$this->table_dev.ditta,
$this->table_dev.tipo,
$this->table_dev.costruzione,
$this->table_dev.motori,
$this->table_dev.nc,
$this->table_dev.serie,
$this->table_dev.ca,
$this->table_dev.consegna,
$this->table_dev.matr_usaf AS usaf,
$this->table_dev.matr_usn AS usn,
$this->table_dev.matr_caf AS caf,
$this->table_dev.matr_raf AS raf,
$this->table_dev.codici,
$this->table_dev.note,
$this->table_dev.reg_civili,
$this->table_dev.matricola_civ,
$this->table_dev.prima_reg,
$this->table_dev.n_contratto,
$this->table_dev.data_contratto,
$this->table_dev.importo_contratto,
$this->table_dev.note_contratto,
$this->table_dev.f29,
$this->table_dev.f30,
");
$this->rmi_db->from("$this->table_dev");
$this->rmi_db->where("$this->table_dev.mm !=", "");
$this->rmi_db->limit($limit, $start);
$this->rmi_db->order_by($col, $dir);
$query = $this->rmi_db->get();
if($query->num_rows()>0)
{
return $query->result();
}
else
{
return null;
}
}
mm字段应自然排序。我不知道如何以及是否有可能解决这个问题。
我在本次讨论中尝试了Bin方式的解决方案,但select无法正常工作(got 500服务器错误)
非常感谢您对使用的任何帮助,请尝试下面的内容。它应该可以工作,但不能测试
function list_all($limit,$start,$col,$dir)
{
$this->rmi_db->select ("
$this->table_dev.id,
$this->table_dev.fl,
$this->table_dev.mm,
$this->table_dev.mm, CAST($this->table_dev.mm as SIGNED) AS casted_column,//changed
$this->table_dev.batch,
$this->table_dev.n,
$this->table_dev.ditta,
$this->table_dev.tipo,
$this->table_dev.costruzione,
$this->table_dev.motori,
$this->table_dev.nc,
$this->table_dev.serie,
$this->table_dev.ca,
$this->table_dev.consegna,
$this->table_dev.matr_usaf AS usaf,
$this->table_dev.matr_usn AS usn,
$this->table_dev.matr_caf AS caf,
$this->table_dev.matr_raf AS raf,
$this->table_dev.codici,
$this->table_dev.note,
$this->table_dev.reg_civili,
$this->table_dev.matricola_civ,
$this->table_dev.prima_reg,
$this->table_dev.n_contratto,
$this->table_dev.data_contratto,
$this->table_dev.importo_contratto,
$this->table_dev.note_contratto,
$this->table_dev.f29,
$this->table_dev.f30,
");
$this->rmi_db->from("$this->table_dev");
$this->rmi_db->where("$this->table_dev.mm !=", "");
$this->rmi_db->limit($limit, $start);
$this->rmi_db->order_by($col, $dir);
$this->rmi_db->order_by('casted_column', 'ASC'); // changed
$this->rmi_db->order_by($this->table_dev.mm, 'ASC'); // changed
$query = $this->rmi_db->get(); //changed
if($query->num_rows()>0)
{
return $query->result();
}
else
{
return null;
}
}
如果您遇到任何问题,请发表评论非常感谢您的时间和帮助。建议的代码并没有解决这个问题…因为mm字段并没有按照自然排序进行精确排序…它看起来像是2的倍数。您可以在这里看到结果:您是否将此行从$this->db->order_by('name','ASC')更改为$this->db->order_;到$this->db->order_by('mm','ASC');是的,查询现在是有序的,即使是以一种奇怪的方式…也许BIN fix提供的结果乘以2…你看到上面的链接了吗?而不是1,2,3,4,5等等。。。我得到1,2,4,8,16,32,6128等等。再次感谢你们的帮助。是的,我看到了输出。请用Cast-way检查更新的答案!哦,天哪……现在工作得很好,阿曼!谢谢。我刚刚编辑了以下几行:CAST(名称为SIGNED)as casted_列,into CAST($this->table_dev.mm as SIGNED)as casted_列,请问“as SIGNED”的目的是什么?多亏了你的帮助,我学到了很多东西。非常感谢