MySQL/PHP - 避免重复 - (INSERT, UNIQUE, REPLACE)
MySQL/PHP - Avoid duplicates - (INSERT, UNIQUE, REPLACE)
我一直在开发我的 own/small 社交媒体平台,我几乎完成了,除了以下问题:
我有所有用户的个人资料,其中一个用户可以对其他人的个人资料发表评论。所以有一个用户 table 看起来像:
编号 |姓名 | first_name | ... |
还有一个table到add/retrieve的评论to/from:
编号 | author_id | receiver_id |评论 |
除一个小问题外,所有这些都运行良好:我想确保每个用户只能对任何个人资料发表一次评论。之后他们将覆盖他们之前的评论。这意味着在将评论插入数据库之前,我必须检查相同的 "author_id" 和 "receiver_id" 组合。
研究这个我发现有 "unique"-keys 你可以在其中组合两列,但我不确定如何为我当前的问题实现它,或者即使它是最好的方法。
示例(用户):
1,母鹿,约翰
2, Doe, Jane
示例(评论):
1, 1, 2, "Hi, I'm great!"(约翰评论简)
2, 2, 1, "What's up?"(简评论约翰)
示例(插入):
XXX, 1, 2, "Nevermind"(约翰评论 again/changes 他的评论,#1 被替换)
新结果(评论):
1、1、2,"Nevermind"(John 的新评论)
2, 2, 1, "What's up?"(Janes 评论保持不变)
如果你能帮我解决这个问题 - 那就太好了!
此致,马丁
首先你添加唯一键:
ALTER TABLE comment ADD UNIQUE( author_id, receiver_id);
您可以使用以下查询插入或更新:
INSERT INTO comment (author_id,receiver_id ,comment ) VALUES (1,2,"Nevermind") ON DUPLICATE KEY UPDATE comment = VALUES(comment)
更多信息你可以看这里:https://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html
您可以使用 UNIQUE 键和 REPLACE 语句来执行此操作。
这种 table 的一个例子是:
CREATE TABLE profile_comment (
id INT NOT NULL AUTO_INCREMENT,
author_id INT NOT NULL DEFAULT 0,
receiver_id INT NOT NULL DEFAULT 0,
comment TEXT NOT NULL,
PRIMARY KEY id,
UNIQUE (author_id,receiver_id)
) [...character set and collation...];
然后您将使用这样的语句来插入或更新 table:
REPLACE INTO profile_comment(author_id,receiver_id,comment)
VALUES (<n>,<n>,<text>);
来源:MySQL 5.0 Manual, REPLACE syntax
请注意,您必须避免 为 REPLACE 语句提供 id 参数,因为主键和唯一键都可能导致记录被删除场景。
我一直在开发我的 own/small 社交媒体平台,我几乎完成了,除了以下问题:
我有所有用户的个人资料,其中一个用户可以对其他人的个人资料发表评论。所以有一个用户 table 看起来像:
编号 |姓名 | first_name | ... |
还有一个table到add/retrieve的评论to/from:
编号 | author_id | receiver_id |评论 |
除一个小问题外,所有这些都运行良好:我想确保每个用户只能对任何个人资料发表一次评论。之后他们将覆盖他们之前的评论。这意味着在将评论插入数据库之前,我必须检查相同的 "author_id" 和 "receiver_id" 组合。
研究这个我发现有 "unique"-keys 你可以在其中组合两列,但我不确定如何为我当前的问题实现它,或者即使它是最好的方法。
示例(用户):
1,母鹿,约翰
2, Doe, Jane
示例(评论):
1, 1, 2, "Hi, I'm great!"(约翰评论简)
2, 2, 1, "What's up?"(简评论约翰)
示例(插入):
XXX, 1, 2, "Nevermind"(约翰评论 again/changes 他的评论,#1 被替换)
新结果(评论):
1、1、2,"Nevermind"(John 的新评论)
2, 2, 1, "What's up?"(Janes 评论保持不变)
如果你能帮我解决这个问题 - 那就太好了!
此致,马丁
首先你添加唯一键:
ALTER TABLE comment ADD UNIQUE( author_id, receiver_id);
您可以使用以下查询插入或更新:
INSERT INTO comment (author_id,receiver_id ,comment ) VALUES (1,2,"Nevermind") ON DUPLICATE KEY UPDATE comment = VALUES(comment)
更多信息你可以看这里:https://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html
您可以使用 UNIQUE 键和 REPLACE 语句来执行此操作。
这种 table 的一个例子是:
CREATE TABLE profile_comment (
id INT NOT NULL AUTO_INCREMENT,
author_id INT NOT NULL DEFAULT 0,
receiver_id INT NOT NULL DEFAULT 0,
comment TEXT NOT NULL,
PRIMARY KEY id,
UNIQUE (author_id,receiver_id)
) [...character set and collation...];
然后您将使用这样的语句来插入或更新 table:
REPLACE INTO profile_comment(author_id,receiver_id,comment)
VALUES (<n>,<n>,<text>);
来源:MySQL 5.0 Manual, REPLACE syntax
请注意,您必须避免 为 REPLACE 语句提供 id 参数,因为主键和唯一键都可能导致记录被删除场景。