gpt4 book ai didi

php - 从 SELECT 中插入,使列对唯一

转载 作者:行者123 更新时间:2023-11-29 01:50:28 25 4
gpt4 key购买 nike

我有一张表(这里简化了例子):

CREATE TABLE msg
(
msg_id VARCHAR(30) NOT NULL,
user_id BIGINT NOT NULL,
message TEXT,

UNIQUE INDEX msg_index (msg_id, user_id);
);

我允许用户使用简单的 INSERT INTO 添加新消息,如下所示:

INSERT INTO msg (msg_id, user_id, message)
VALUES ($_POST["id"], $user["id"], $_POST["message"]);

一旦消息存在,我就允许用户创建一个副本。语句很简单,我可以这样做:

INSERT INTO msg (msg_id, user_id, message)
SELECT CONCAT(msg_id, "_Copy") AS msg_id, user_id, message
WHERE msg_id = $_POST["id"];

第一次工作正常,只有当用户对同一封邮件再次尝试 Duplicate 命令时,它会因为 UNIQUE INDEX 约束而失败。

有没有办法更改 CONTACT() 语句以生成唯一标识符(即“_Copy1”、“_Copy2”、...),或者我是否必须测试 >INSERT 成功,如果没有,使用下一个可能的条目重试? (我知道如何做到这一点,我只是想知道 MySQL 是否提供令人难以置信的功能,例如自动使一组列唯一,就像魔术一样!)

最佳答案

您始终可以使用 RAND() 函数来创建随机数(您可以搜索 SO 了解如何在 MySQL 中生成随机字符串),但我真的不认为这是一个好的解决方案。

您的 ID 应该是唯一的,并且可能会自动递增。
最好添加一个新列,也许是“source_msg”,它将保存原始消息的 ID(这样您就可以始终知道用户从哪个原始消息复制了当前消息)。

如果是“原始”消息 - 只需将 0 放在那里。

表结构:

CREATE TABLE msg
(
msg_id int NOT NULL AUTO_INCREMENT,
source_msg INT NOT NULL,
user_id BIGINT NOT NULL,
message TEXT,
PRIMARY KEY (ID),
UNIQUE INDEX msg_index (msg_id, user_id);
);

新消息:

INSERT INTO msg (msg_id, source_msg, user_id, message)
VALUES (NULL, 0, $user["id"], $_POST["message"]);

重复消息:

INSERT INTO msg (msg_id, source_msg, user_id, message)
SELECT null, msg_id, user_id, message;

Regardless - read about boby tables.

关于php - 从 SELECT 中插入,使列对唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655912/

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