如何删除多行?

Posted

技术标签:

【中文标题】如何删除多行?【英文标题】: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)));

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

【问题讨论】:

【参考方案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)");

【讨论】:

以上是关于如何删除多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Backand 上的表中删除多行?

如何在vi中删除多行?

如何删除表格视图中的多行? [复制]

删除多行时如何实现 NSFetchedResultsController 委托?

如何在 Jqgrid MVC 中删除多行

Linux运维必备技能:如何在 Vim 中删除多行?