php - MySQL/PHP - 避免重复 - (INSERT, UNIQUE, REPLACE)

标签 php mysql replace unique profile

我一直在自己/小型社交媒体平台上工作,除了以下问题,我几乎完成了:

我有我所有用户的个人资料,其中一个用户可以对其他人的个人资料发表评论。所以有一个用户表,如下所示:

编号 |姓名 |名字 | ... |

还有一个用于向/从中添加/检索评论的表格:

编号 |作者编号 |接收者 ID |评论 |

除一个小问题外,所有这些都运行良好:我想确保每个用户只能对任何个人资料发表一次评论。之后他们将覆盖他们之前的评论。这意味着在将评论插入数据库之前,我必须检查相同的“author_id”和“receiver_id”组合。

研究这个我发现有“唯一”键,你可以在其中组合两列,但我不确定如何为我当前的问题实现它,或者即使它是最好的方法.

示例(用户):

1,母鹿,约翰

2,小伊,简

例子(评论):

1, 1, 2, “嗨,我很棒!” (约翰对简的评价)

2, 2, 1, “怎么了?” (简对约翰的评价)

示例(插入):

XXX, 1, 2, “Nevermind”(John 再次评论/更改他的评论并替换#1)

新结果(评论):

1、1、2,“没关系”(John 的新评论)

2, 2, 1, “怎么了?” (Janes 评论保持不变)

如果你能帮我解决这个问题 - 那就太好了!

最好的问候,马丁

最佳答案

您可以使用 UNIQUE 键和 REPLACE 语句来执行此操作。

这样的表的一个例子是:

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...];

然后您将使用这样的语句来插入或更新表:

REPLACE INTO profile_comment(author_id,receiver_id,comment)
VALUES (<n>,<n>,<text>);

来源:MySQL 5.0 Manual, REPLACE syntax

请注意,您必须避免为 REPLACE 语句提供 id 参数,因为在这种情况下,主键和唯一键都可能导致记录被删除。

关于php - MySQL/PHP - 避免重复 - (INSERT, UNIQUE, REPLACE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753073/

相关文章:

Java删除包含引号的子字符串

php - 用户登录后如何处理额外的登录尝试?

PHP 从 webroot 之外的文件中包含 webroot 中的文件

带有可选参数的php mysql函数

php - 我该如何处理mysql和php中的 'max_user_connections'?

在 iframe 中使用替换方法的 Javascript

java - 数组搜索时出现 IndexOutOfBoundsException

javascript - 使用 javascript 通过表单发送对象

php - Facebook XMPP 聊天 API 发送消息 PHP

python - MySql Python 连接