2013-03-02 3 views
0

Используя CI, мне нужно выполнить игнорирование вставки с помощью подзапроса. Я получаю ошибку код воспламенитель, когда я пытаюсь сделать это:codeigniter use set() with insert_string()

$data = array(
      "user_id" => $user_id, 
      "workload_id" => $wid 
    ); 
    $this->db->set($data); 
    $this->db->set("order", "(SELECT ifnull(max(`order`)+1, 0) FROM (SELECT * FROM default_workloads_users A) B WHERE user_id=".$user_id.")", FALSE); 
    //$this->db->insert("default_workloads_users"); 
    $ins = $this->db->insert_string("default_workloads_users"); 
    $ins = str_replace("INSERT", "INSERT IGNORE", $ins); 
    $this->db->query($ins); 

Это говорит мне, что я пропускаю второй параметр insert_string. Мысли?

ответ

0

Выяснил способ взлома. Сначала используйте insert_string, затем str_replace подзапрос в оператор. Новый код:

$data = array(
      "user_id" => $user_id, 
      "workload_id" => $wid, 
      "order" => "@order" 
    ); 
$ins = $this->db->insert_string("default_workloads_users", $data); 
$ins = str_replace("INSERT", "INSERT IGNORE", $ins); 
$ins = str_replace("@order","(SELECT ifnull(max(`order`)+1, 0) FROM (SELECT * FROM default_workloads_users A) B WHERE user_id=".$user_id.")",$ins); 
$this->db->query($ins);