2015-02-08 141 views
1

我想实现文章帖子的标签功能,因此用户可以在发布文章时添加多个标签。从INSERT IGNORE语句获取多个插入ID

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

标签:

id | tag (Unique) 

文章:

id | title | content 

article_tags:

id | article_id | tag_id 

所以,(1)当一个新的文章是插入,我需要插入articles表格并获取插入标识为article_id

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

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

或者我只是不能(而不是使用一个一个的插入解决方案)?

回答

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); 
    } 
+0

你可能误解了我的问题。 – mrmoment 2015-02-08 10:59:04

+0

@mrmoment,绝对,对不起。看我的编辑。 – AdrienXL 2015-02-08 11:10:23

1

@ AdrienXL的答案是一个接一个的解决方案。

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

而当我插入article_tags的关系时,可以使用“批量选择”查询来获取ID。所以我不一定需要在tags表中手动提取和存储标签的ID。

伪SQLS想:

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]