2016-08-16 97 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中做的那樣。