如何删除多行?
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)");
【讨论】:
以上是关于如何删除多行?的主要内容,如果未能解决你的问题,请参考以下文章