2017-02-11 75 views
-1

您好我有這些表:什麼是插入帖子,標籤,類別到mysql的最佳方式?

Table Name | column 1 | column 2 | ... 
Posts  | ID  | Title | description 
Tags  | ID  | Name 
Categories | ID  | Title | Parent-ID 
Post-Tag | ID  | post-id | tag-id 
Post-Cat | ID  | post-id | cat-id 

我怎麼能插入1周後與標籤&類別? 我可以插入一個新的職位是這樣的:

$stmt = $conn->prepare("INSERT INTO Posts (title, description) VALUES (:title, :desc)"); 

$stmt->bindParam(':title', $title); 
$stmt->bindParam(':desc', $description); 

$post_id = $conn->lastInsertId(); 

我每一次只能有一個職位,但也許有五個標籤& 2個大類所以 我如何檢查是否存在,如果得到它的ID &標籤/類別存在&不插入它然後獲得ID &插入後標籤/後貓表??

+0

你標記爲PDO還使用了'bind_param()'這是mysqli_,和然後是'PDO的'lastInsertId()'。現在的問題還不清楚哪個API真的用於連接。那些不同的apis不混雜。 –

+0

修正了它。當從我的系統 –

+0

複製代碼來回答這個問題時,出現了問題,您需要檢查是否存在使用'SELECT'和'rowCount()'的東西。 –

回答

0

這裏的樣本代碼給你一個想法,怎麼可能工作一點點......

<?php 
class PostRepository { 

    public static function tagExists($tag) { 
     // do your query here and return tag-id if it exists and false if it doesnt exist 
    } 

    public static function insertTag($tag) { 
     // do your insert query here and return the inserted id and false on failure 
    } 

    public static function insertPostTag($id_post, $id_tag) { 
     // do your insert query here and return the inserted id 
    } 

    public static function insertPost($title, $description, $arr_tags) { 

     $conn = PdoHelper::getPdoInstance(); // get your conn-obj however... 

     $sql = "INSERT INTO `Posts` (title, description) VALUES (:title, :desc)"; 
     $stmt = $conn->prepare($sql); 
     $stmt->bindParam(':title', $title); 
     $stmt->bindParam(':desc', $description); 

     $post_id = $conn->lastInsertId(); 

     foreach($arr_tags as $tag) { 
      $existing_tag = self::tagExists($tag); 
      if(!$existing_tag) { 
       $existing_tag = self::insertTag($tag); 
      } 
      self::insertPostTag($post_id, $existing_tag); 
     } 

    } 
} 
相關問題