18

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

$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)));

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

4

6 回答 6

40

你试过这个吗?

$names = array(4,5);
$this->db->where_in('id', $names);
$this->db->delete('mytable');
于 2012-05-08T06:38:04.017 回答
7

不需要关联数组。

$ids[] = 1;
$ids[] = 2;

$this->db->where_in( id, $ids );
$this->db->delete('Table_Name');
于 2013-01-31T10:13:41.097 回答
4

为其编写自定义查询

$this->db->query("DELETE FROM `TABLE_NAME` WHERE `id` IN(1,2,3,4,5)");
于 2012-05-08T05:55:35.347 回答
3

这是行不通的

$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();

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

于 2014-05-15T09:54:42.673 回答
1

To delete a single use row:

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

Have you tried doing this? I'm pretty sure it should work.

$this->db->delete('TABLE_NAME', array(array('id' => 5), array('id' => 3), ...));
于 2012-05-08T03:38:07.047 回答
0

这是一个老问题,但我会回答它,因为我必须在 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)");
于 2020-10-21T12:45:57.453 回答