2012-07-22 91 views
0

我正在開發一個項目,使用戶能夠撰寫帖子然後對其進行標記。最後,其他用戶進來並投票選出最佳職位。使用Codeigniter中的帖子標籤

在我面對標籤挑戰之前,一切都變得像一種魅力:如何制定出最簡單的方法來處理它們?

我使用了多對多的關係來爲每個帖子分配一些標籤。但是在將它們插入數據庫之前我發現了一些困難。這些困難包括:'我怎麼知道這個標籤還沒有存儲在數據庫中?'(當然,我把名稱字段設置爲UNIQUE,但是如果有人進入了預先存儲的標籤,他將面臨codeigniter錯誤, 。不想它顯示)..

因此,在短期的話,我想出了這個解決方案:

  1. 從數據庫中獲取的所有標籤。
  2. 存儲數組$ all。
  3. 獲取用戶輸入的標籤。
  4. 將它們儲存在數組$用戶
  5. 做一個交集$在foreach循環
    • 查詢標籤表當前標籤
    • 的ID插入posts_has_tags表中的ID存在
  6. 爲其他陣列我會再拍每個
    • 插入標籤到標籤表。
    • 獲取insert_id()$ id
    • 將$ id插入到posts_has_tags表中。

好了,我知道這是一種混亂的。尤其是對於循環陣列,這可能會隨着時間的推移而變大..所以,我問你們:) 我是否正確..? 有沒有更簡單的方法..?

謝謝。

+0

爲什麼標籤實際上需要是唯一的? – 2012-07-22 03:36:37

+0

,因爲我需要多個帖子才能在特定的代碼中進行標記,例如旅行。 – adel 2012-07-22 09:57:12

回答

0

你可以這樣做:

SELECT * FROM `tags` WHERE `name`=:name_1 OR `name=:name_2 ... 

然後,你可以得到的標籤,並從用戶的標籤陣列中刪除:

foreach ($user_tags as $tag) { 
    if (!in_array($tag, $db_tags)) { 
     $new_tags[] = $tag; 
    } 
} 

你只有兩個查詢這種方式,但我不能說如何保護這些代碼免受競爭條件的影響。