Удалить несколько строк в Codeigniter по нескольким столбцам - PullRequest
1 голос
/ 03 марта 2020

У меня есть ассоциативный массив, например:

array(3) {
  [0]=>
  array(2) {
    ["userId"]=>
    string(1) "10"
    ["customerId"]=>
    string(3) "1809"
  }
  [1]=>
  array(2) {
    ["userId"]=>
    string(1) "13"
    ["customerId"]=>
    string(3) "1094"
  }
  [2]=>
  array(2) {
    ["userId"]=>
    string(1) "45"
    ["customerId"]=>
    string(2) "210"
  }
}

Я пытаюсь удалить эти строки из базы данных, но не могу найти правильный запрос Codeigniter для запуска.

Сгенерированный запрос должен выглядеть следующим образом:

DELETE FROM table
WHERE (userId,customer_id) IN ( (10,1809),(10,1809),(45,210) )

Если я попробую это

$this->db->where_in( '(userId, customer_id)', array( array(10,1809), array(10,1809), array(45,210) ));
$this->db->delete('table');
die(var_dump($this->db->last_query()));

Я получу это, что, конечно, неверно:

DELETE FROM `table`
WHERE (userId, customer_id) IN(Array, Array, Array)

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Это то, что я пытался, и это работает:

foreach ( $data as $row )
{
    $userIds[] = $row['userId'];
    $customerIds[] = $row['customerId'];
}

$this->db->where_in('userId', $userIds);
$this->db->where_in('customer_id', $customerIds);
$this->db->delete('table');

это удаляет строки и сгенерированный запрос:

DELETE FROM `table`
WHERE `userId` IN('10', '11', '54')
AND `customer_id` IN('1809', '1904', '201')
0 голосов
/ 03 марта 2020

Получить значения связанного массива в один массив и затем передать его в запрос

$assoicative_array = array(array(10,20,30));
    $ids=array();
    foreach($assoicative_array as $key =>$value ){
        $ids[]=$value;
    }
    $this->db->where_in('userId',$ids);
    $this->db->where_in('customer_id',$ids);
    $this->db->delete('table');
    die(var_dump($this->db->last_query()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...