2016-08-16 111 views
0

插入具有唯一字段的行时,如果将重复的情况下进入唯一字段的值更改为不同的值,是否可能?Mysql插入,如果在唯一键上的重复值,插入不同的值

情况:用户正在添加一篇新文章,该文章的名称不能重复。出于某种原因,用户键入数据库中已存在的名称。

如果使用“ON DUPLICATE KEY UPDATE” - 上一条记录(与插入的名称相同)将获取其他字段中的所有新数据(发生更新) - 不好。

需要的是,在插入时,如果该字段是唯一的,并且数据库中存在匹配项,请将插入的值更改为类似“[DUPLICATE] name”的值。

这将显示重复的存在,用户将只更改名称(可能由于错误而插入为重复项)。

+0

尝试插入。如果失败,请更改唯一值并再次点击。 – tadman

+0

是否有一种方法可以将中介(select ... where name =“article name”)包含到insert语句中,因此select将生成true(即连接名称与“[duplicate]”字符串)或false(名称为按原样插入)? – bbe

+0

'INSERT INTO ... SELECT ... FROM'是一件事情,所以也许? – tadman

回答

1

你必须做这样的事情(使用预处理语句与库MySQLi) -

SELECT name FROM table WHERE name=? 

绑定变量(我假设$articleName)和存储结果,然后检查是否有与mysqli_num_rows()匹配。

如果存在一个或多个行,请重命名文章名称。

$articleName=$articleName."[DUPLICATE]"; 

然后插入数据库。

注意:通常不会有相同的文章名称,因为可以用很多方式构造句子。考虑构建一个非常聪明的程序来检测或手动检查,就像他们在SO中做的那样。