PHP MySQL:更好地更新标签系统的方法

时间:2014-09-06 18:22:12

标签: php mysql

我在MySql数据库中插入多个标签,如下所示:

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

现在,在编辑页面中我需要编辑标签(添加新标签 - 删除标签或插入/更新现有标签)。

我的方法:(在行动中)

首先:我删除tags所有articleid

第二次:插入现有内容或新建/编辑tags

我的方法是真的和优化的吗?!

有更好的方法吗?

1 个答案:

答案 0 :(得分: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