2013-08-23 39 views
2

我在back-end.It項目正與PHP,MySQL的有各種文章瀏覽,分爲不同的類別一個用戶登錄系統。
我最近添加了一個手錶列表功能它,使用戶能夠添加文章到他們的手錶名單/儀表板
我有以下表格。一組唯一對列在一個MySQL表

文章
文章ID(INT)小學唯一
貓(VARCHAR)
名(爲varchar)
SUBCAT(VARCHAR)
描述(VARCHAR)
添加日期

用戶
username(varchar)初始唯一
lname
fname
加入日期

監視列表
文章ID(INT)
用戶名(爲varchar)
date_watch

正如我們可以看到有手錶名單表中沒有唯一鍵
我要讓(用戶名+文章ID)唯一的一對 因爲每一個用戶名超過1物品ID的存在,反之亦然
我只想插入刪除行和它的不需要更新他們
如何防止重複的條目?
到現在我一直在檢查的行數用PHP

"SELECT * FROM watchlist WHERE article-id={$id} AND username={$user}" 

如果

mysql_num_rows() >1(not allowed to insert) 

這工作正常,但如果錯誤地被執行INSERT命令thare將是一個重複的條目
如何防止它?
我使用phpmyadmin的

+0

你會發現你的答案在這裏:http://stackoverflow.com/questions/635937/how-do-i-specify-unique-constraint-for-multiple-columns-in-mysql。 – Sutandiono

回答

5

您可以簡單地添加一個唯一的密鑰表:

ALTER TABLE `watchlist` 
ADD UNIQUE INDEX `watchlist_unique` (`article-id`, `username`); 

另外,在看你有什麼,你不妨選擇將其設置爲你的主鍵,用這個代替的功能以上:

ALTER TABLE `watchlist` 
ADD PRIMARY KEY (`article-id`, `username`); 

兩者都會阻止任何插入重複條目。

另外,如果你想在這種情況下插入,你可能想看看INSERT忽略和重複鍵。欲瞭解更多信息,請參閱"INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

+1

需要注意的一件事是,如果在此之前任何唯一索引已在'article-id'或'username'上定義,則必須刪除它們以允許此規則適用於諸如'在重複密鑰更新'上 – VSB

1

嘗試像

$sql = "SELECT * FROM watchlist WHERE article-id={$id} AND username={$user}"; 
if(mysql_num_rows($sql) >=1) { 
    //Prevent Insert 
} else { 
    //Put your Insert query 
} 

或者乾脆用IGNORE

INSERT IGNORE INTO watchlist 
    (article-id, username) 
VALUES 
    ({article-id}, {username}), 

Makesure您正在使用的列作爲UNIQUE constraints.If不會改變他們像

ALTER TABLE `watchlist` 
ADD UNIQUE INDEX `watchlist_unique` 
(`username`,`article-id`); 

您需要檢查atleast1記錄不大於1

,並儘量避免mysql_*語句由於整個ext/mysql PHP擴展,它提供了與前綴mysql_*命名的所有功能,被正式棄用的PHP v5.5.0,並將於在未來刪除。

有兩個其他MySQL的擴展,可以更好地利用:MySQLiPDO_MySQL,其中任何一個都可以用來代替ext/mysql

+0

如果你閱讀他的原始文章,你的解決方案正是他所嘗試的。如果他錯誤地將相同的細節插入他的數據庫中,他想要一份保險。 – Sutandiono

+0

@Sutandiono你檢查我的答完全??我給DIFF solutuion從他身上。 – Gautam3164

+0

我告訴他檢查與'> ='並且還使用'IGNORE'..see它 – Gautam3164

0

您可以對用戶名和文章ID唯一索引:

ALTER TABLE watchlist ADD UNIQUE INDEX my_idx (username, article-id); 

然後沒有重複的刀片將被允許。

您還可以使用INSERT INTO ... ON DUPLICATE KEY語法優雅地處理重複插入,以使用給定的用戶名article-id對更新條目中的某些字段。