我需要删除多行,然后重新排序下一个数据库记录。 ELDI_Order这不是自动递增。
public function delete_one_record($id)
{
$this->db->select('ELDI_Order');
$this->db->where("ELDI_Id", $id);
$eldi_order = $this->db->get('elem_diccio')->row()->ELDI_Order
// Delete that record
$this->db->delete('elementos_diccionario', array('ELDI_Id' => $id));
// Reorder ELDI_Order for the rest of the records
$this->db->set('ELDI_Order', 'ELDI_Order-1', FALSE);
$this->db->where('ELDI_Order >', $eldi_order);
$this->db->update('elem_diccio');
}
function eliminar_varios_elementos_diccionario($ids)
{
$this->db->where_in('ELDI_Id', explode(",", $ids));
$this->db->delete('elem_diccion');
// Code for reordering
}
例如,如果我删除第2行和第8行(第4行),我想将1减到prueba_3的ELDI_Order列,因为它移动了“ 1位”,而2则从prueba_5减了2,因为它删除了“ 2”位,因为我删除了2条记录。
感谢您的帮助和时间!
答案 0 :(得分:1)
只需使用您的delete_one_record
函数和foreach。我看不到一种方法来一次无效率地对多个项目进行重新排序-因此单独完成它们也不错。
function eliminar_varios_elementos_diccionario($ids)
{
if (!is_array($ids)) {
$ids = explode(",", $ids);
}
foreach ($ids as $id) {
$this->delete_one_record(intval($id)); // assummed function is in same model
}
}
建议:考虑使用交易。