Codeigniter无法使用join方法从数据库表中删除行

时间:2014-10-27 14:07:30

标签: php mysql codeigniter join

我想从'table1'中删除那些行(user_id = 5),但我应该检查这些帖子是否是'(title = title1 in table2)。我使用Codeigniter并在尝试删除时收到此错误:'除非它们包含"其中"否则不允许删除。或"喜欢" “请你帮我检查一下我的代码有什么问题。

表1:

enter image description here

表2:

enter image description here

public function delete($title, $user_id){ 

    $this->db->select('table1.*');
    $this->db->from('table1','table2');   
    $this->db->where('table1.user_id', $user_id); 
    $this->db->where('table2.title', $title);
    $this->db->join('table2','table1.post_id=table2.post_id');

     $query = $this->db->get();   

        if ($query && $query->num_rows() > 0) {

    $this->db->delete('table1.*');
    $this->db->from('table1','table2');   
    $this->db->where('table1.user_id', $user_id); 
    $this->db->where('table2.title', $title);
    $this->db->join('table2','table1.post_id=table2.post_id');
    return true;
            } 
    else {
    return false;
    }

   } 

4 个答案:

答案 0 :(得分:1)

使用子查询。

例如

#Create where clause
$this->db->select('id');
$this->db->from('table2');
$this->db->where('table2.title', $title);
$where_clause = $this->db->get_compiled_select();

#Create main query
$this->db->where('table1.user_id', $user_id); 
$this->db->where("`id` NOT IN ($where_clause)", NULL, FALSE);
$this->db->delete('table1'); 

参考

答案 1 :(得分:0)

运行第一个查询后,您将获得必须删除的用户集。 运行此set throw foreach循环以获取用户的id和必须删除的帖子到数组。

  $user_array = array();
  $post_array = array();

  foreach($query->result() as $query) 
  {
      $user_array[$query->user_id] = $query->user_id;
      $post_user[$query->post_id] = $query->post_id;
  }

然后

  this->db->where_in('user_id', $user_array)->delete('table1');
  this->db->where_in('post_id', $post_array)->delete('table2');

我知道这不是最好的决定。但我认为这是最容易理解的。

答案 2 :(得分:0)

您可以使用以下代码从表中删除数据,因为当您从多个表中删除多个数据时,codeigniter忽略连接。

$sql = "DELETE t1 FROM table1 t1
  JOIN table2 t2 ON t1.thing_id = t2.id
  WHERE t2.otherthing_id = ?";
$this->db->query($sql, array($id));

答案 3 :(得分:0)

JOINS用于从不用于删除数据的数据库中获取数据如果要使用单个查询从多个表中删除数据,则需要在MySQl中使用级联,您也可以删除数据来自与当前表相关的其他表。