PHP:防止Mysql中的重复标记

时间:2014-05-27 19:48:21

标签: php mysql

我有像这样的标签的MySql表:

| id |   name    |
| 1  |   Linux   |
| 2  |  Windows  |
| 3  |   Unix    |
| 4  |    Dos    |
| 5  |  FreeBSD  |

在新闻页面中,用户添加新标签:

Linux,OpenBSD,Test 

现在,Linux之前添加了,所以我需要添加ONLY OpenBSD和Test Into Tags Table。我的意思是:如果用户标签是新的,如何INSERT标签?!

2 个答案:

答案 0 :(得分:8)

  1. UNIQUE列上添加name约束。
  2. 使用INSERT IGNORE以便插入已存在name的列只会跳过该行。例如:

    INSERT IGNORE INTO tags (name) VALUES ('Linux'), ('OpenBSD'), ('Test');
    
  3. 由于您的数据中包含不同的内容[例如:linux vs Linux],您需要确保在数据库中使用不区分大小写的合并,例如utf8_latin1_ci [ci代表不区分大小写]或确保在插入数据之前使用strtolower()

答案 1 :(得分:2)

像Jay建议的那样,规范化数据,然后创建列UNIQUE,并使用INSERT IGNORE INTO yourTags(name) VALUES(?),(?),(?)之类的东西(并将这三个值作为参数发送)。我还假设ID列为AUTO INCREMENT