![](/img/trans.png)
[英]Update column value in each row where the row is identical to another row in the same 2d array
[英]MySQL disallow row that has 2 identical column values with another row
這是我的MySQL表:
我將數據插入表中,如下所示:
$stmt = $db->prepare("INSERT INTO likes (user_id,post_id) VALUES (?,?)");
$stmt->execute(array($_SESSION['user'],$_POST['id']));
這很好用,但是如您所見,MySQL表有兩個相同的行(id為3和4),它們的user_id為5,post_id為196。換句話說,我的MySQL表記錄了id = 5的用戶喜歡ID = 196的帖子兩次。 我如何不允許有兩行具有相同的user_id 和相同的post_id的情況
您需要在user_id和post_id列上設置唯一約束
以下答案可能會導致出現競態條件,並且在某些情況下可能會重復數據庫條目。
感謝@Martin查找以下系統的主要缺陷:
這是您在業務邏輯中應該做的事情。 我實現了幾乎相同的系統的方式是這樣的(用偽代碼):
Show Blog/Video/Post/Etc.
Has user "liked" this?
Yes = show "unlike" button (on server, not JS)
No = show "like" button (on server, not JS)
Add or delete "like" as necessary
顯示任一按鈕的代碼在服務器上,因此用戶無法攔截該按鈕並手動選擇要執行的操作。
唯一的缺點是必須有一種方法來識別用戶單擊哪個按鈕,這意味着用戶可能會花費大量時間進行挖掘和擺弄,並且可能會更改頁面上的按鈕/鏈接/其他內容。
通過在服務器上測試用戶是否喜歡,然后僅在用戶不喜歡時才插入,我克服了這一問題。
CREATE UNIQUE INDEX user_post on likes (user_id, post_id)
這樣可以防止相同(user_id,post_id)值超過一次...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.