CodeIgniter-删除多行并对数据库中的下一个记录重新排序

时间:2018-08-06 10:35:24

标签: php codeigniter

我需要删除多行,然后重新排序下一个数据库记录。 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条记录。 Example

Example2

感谢您的帮助和时间!

1 个答案:

答案 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
       }
    }

建议:考虑使用交易。