gpt4 book ai didi

php - 在 MySQL 表中设置唯一的列对

转载 作者:行者123 更新时间:2023-12-04 11:29:59 25 4
gpt4 key购买 nike

我正在开发后端的php-MySQL项目。它有各种文章可供浏览,分为各种类别和一个用户登录系统。
我最近添加了一个观察列表功能,它使用户能够将文章添加到他们的观察列表/仪表板
我有以下表格。

Articles table
article-id(int) Primary-Unique
cat(varchar)
name(varchar)
subCat(varchar)
description(varchar)
date added

users table
username(varchar) Primary-Unique
lname
fname
joined-date

.Watchlist table
article-id(int)
username(varchar)
date_watch

正如我们所见,观察列表没有唯一键
我想让 (username + article-id) 成为唯一对因为对于每个用户名,存在超过 1 个文章 ID,反之亦然
我只想插入删除行,而不需要更新它们
如何防止重复条目?
到目前为止,我一直在用 php 检查行数

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

如果

mysql_num_rows() >1(not allowed to insert) 

这工作正常,但如果错误地执行了 INSERT 命令,将会出现重复条目​​
如何防止它?
我正在使用 phpmyadmin

最佳答案

您可以简单地向表中添加一个唯一键:

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

另外,看看你所拥有的功能,你也可以选择将它设置为主键,使用这个而不是上面的:

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

两者都将防止插入重复条目。

此外,如果您想在这种情况下插入,您可能需要检查 INSERT IGNORE 和 ON DUPLICATE KEY。有关两者的更多信息,请参阅 "INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE" .

关于php - 在 MySQL 表中设置唯一的列对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18395272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com