【问题标题】:How to delete multiple rows?如何删除多行?
【发布时间】:2012-05-16 13:17:05
【问题描述】:

所以我可以使用以下方法删除一行:

$this->db->delete($tableName,array("id"=>4));

...但我不知道如何删除多行。我试过了:

$this->db->delete($tableName,array("id"=>4,"id"=5));

还有:

$this->db->delete($tableName,array(array("id"=>4),array("id"=5)));

...但它们都不起作用。我觉得这应该很容易。有答案吗?

【问题讨论】:

    标签: database codeigniter


    【解决方案1】:

    你试过了吗?

    $names = array(4,5);
    $this->db->where_in('id', $names);
    $this->db->delete('mytable');
    

    【讨论】:

    • 如何在多个列上删除多个具有删除条件的记录,例如从 tbl 中删除,其中 col1 = 1 AND col2 = 2;我在 multidim 数组中有这种情况
    • 伟大的发现..!!这在 CI 文档中没有记录。像魅力一样工作
    • 非常感谢
    【解决方案2】:

    不需要关联数组。

    $ids[] = 1;
    $ids[] = 2;
    
    $this->db->where_in( id, $ids );
    $this->db->delete('Table_Name');
    

    【讨论】:

      【解决方案3】:

      为其编写自定义查询

      $this->db->query("DELETE FROM `TABLE_NAME` WHERE `id` IN(1,2,3,4,5)");
      

      【讨论】:

      • 这看起来应该可以工作,因为它是使用 CI 的 where_in 函数的@MoyedAnsari 答案的手动版本。谢谢。
      【解决方案4】:

      这是不行的

      $names = array(4,5);
      $this->db->where_in('id', $names);
      $this->db->delete('mytable');
      
      DELETE FROM table_name WHERE id IN ('4,5')
      

      注意一件事不是单个字符串/数字('4,5'),我们应该用这样的单引号('4','5')对每个 id 进行潜水

      最好的方法

              //$ids = 1,2,3.....
              $ids_exp = explode(',',$ids);
              $this->db->where_in('id',$ids_exp);//
              $this->db->delete('table_name')
              return $this->db->affected_rows();
      

      上面的查询将是工作享受............

      【讨论】:

      • 为什么在使用 return $this->db->affected_rows(); 时总是返回 1;
      【解决方案5】:

      删除单个使用行:

      $this->db->delete('TABLE_NAME', array('id' => 5));
      

      你试过这样做吗?我很确定它应该可以工作。

      $this->db->delete('TABLE_NAME', array(array('id' => 5), array('id' => 3), ...));
      

      【讨论】:

        【解决方案6】:

        这是一个老问题,但我会回答它,因为我必须在 8 年后研究同样的问题。

        查了$wpdb->delete()的源码,基本只会删除1行。它通过将 1 col 与 1 val 匹配,然后与 AND 连接来工作。因此,如果您执行array("id"=>4,"id"=>5),它会将其读取为带有 (id==4 AND id==5) 的行。没有行会符合该条件。

        所以要删除多行,唯一的方法(据我所知)是使用自定义查询:

        $wpdb->query("DELETE FROM `TABLE_NAME` WHERE `id` IN(1,2,3,4,5)");
        

        【讨论】:

          猜你喜欢
          • 2019-03-23
          • 2013-01-08
          • 1970-01-01
          • 2019-06-08
          • 2013-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-21
          相关资源
          最近更新 更多