从INSERT IGNORE语句中获取多个插入ID

时间:2015-02-08 10:48:41

标签: php mysql insert

我想为文章帖子实现标记功能,因此用户可以在发布文章时添加多个标记。

我有一个tags表,一个articles表和一个article_tags表。

标记:

id | tag (Unique)

文章:

id | title | content

article_tags:

id | article_id | tag_id

所以(1)当要插入新文章时,我需要插入articles表并获取插入ID为article_id

(2)然后,我使用单个INSERT IGNORE语句将多个标记插入tags表。在这些标签中,有些可能存在并将被忽略。

(3)现在我要用article_tags插入文章和标签的关系。但是,如何在步骤(2)中将ID作为tag_id用作最后一个表?

或者我不能(相反,使用逐个插入解决方案)?

2 个答案:

答案 0 :(得分:1)

@ AdrienXL的回答是一对一的解决方案。

我发现我可以先用INSERT IGNORE批量插入标签。

当我插入article_tags的关系时,我可以使用"批量选择"查询以获取ID。因此,我不一定需要手动获取和存储标签' tags表中的ID。

伪SQL希望:

INSERT IGNORE tags (tag) VALUES [the tag array]

并且

INSERT INTO article_tags (tag_id, article_id) 
    SELECT id, [some_article_id] FROM tags WHERE tag IN [the tag array]

答案 1 :(得分:0)

型号:

   public function insert_articles($data)
   {
      $this->db->insert('articles', $data);
      return $this->db->insert_id(); 
   }

   public function insert_tags($data)
   {
     $insert_query = $this->db->insert_string('tags', $data);
     $insert_query = str_replace('INSERT INTO','INSERT IGNORE INTO',$insert_query);
     $this->db->query($insert_query);

     return $this->db->insert_id(); 
   }

   public function insert_article_tags($data)
   {
     return $this->db->insert_batch('articles_tags', $data);
   }

控制器:

   public function myfunction()
   {
     $id_article = $this->my_model->insert_articles($data);
     $article_tags = array();
     foreach($mytags as $t)
     {
         $id_tag = $this->my_model->insert_articles($data);
         array_push($article_tags, array("id_article" => $id_article, "id_tag" => $id_tag));
         //Supposed two fields table : id_article | id_tag
     }

     $this->my_model->insert_article_tags($data);
   }