2014-09-06 86 views
0

我插入在MySQL數據庫中的多個標籤,如:現在PHP MySQL的:更好的方式來更新標籤系統

| id | tagname | articleid | 
---------------------------- 
| 1 | PHP | 120 | 
---------------------------- 
| 2 | Linux | 120 | 
---------------------------- 
| 3 | Apache | 120 | 

,在編輯頁面,我需要編輯標籤(加入新的標籤 - 刪除標籤或插入/更新現有標籤)。

我的方法:(行動)

首先:我刪除所有tagsarticleid

:插入現有的或新建/編輯tags

我的方法是真實和優化?!

有沒有更好的方法?

+0

我們正在談論數百萬個一次編輯的標籤,或者一次編輯3-4個標籤?你確定你正在優化標籤最重要/最頻繁的用例嗎? – 2014-09-06 18:37:30

+0

我有每篇文章最多5個標籤。 – user27133 2014-09-06 18:44:24

回答

0

您可以創建一個只允許每個標籤每個文章出現一次的UNIQUE索引。完成之後,您可以使用單個DELETE和單個INSERT IGNORE來保留已存在的標籤並添加新的標籤;請注意,您只需要在更新後列出標籤;

-- Done a single time for the table. Disallows duplicates 

CREATE UNIQUE INDEX tag_article_uq ON mytable(tagname, articleid); 

-- Items have been updated/added to add Python/Nginx and remove Apache 

-- Delete all tags that aren't listed for articleid 120  

DELETE FROM mytable 
WHERE articleid=120 AND tagname NOT IN ('PHP', 'Linux', 'Python', 'Nginx'); 

-- Add the tags that don't already exist for articleid 120. 

INSERT IGNORE INTO mytable (tagname, articleid) VALUES 
('PHP', 120), ('Linux', 120), ('Python', 120), ('Nginx', 120); 

An SQLfiddle to test with