Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入唯一值而不自动递增_Php_Mysql_Sql - Fatal编程技术网

Php 插入唯一值而不自动递增

Php 插入唯一值而不自动递增,php,mysql,sql,Php,Mysql,Sql,为了简单地解释这一点,想象一个房间里挤满了人在互相交谈。一个人对另一个人所做的每一条语句都是该表中的一条记录,所有这些记录都有一个通过自动递增分配的唯一ID 然而,并不是这个房间里的每个人都在和其他人交谈。正在进行多个对话 这些对话之间必须是独一无二的。这将防止启动重复的会话ID,并防止站点收集不属于该用户的所有语句 或者,在图形表示中: ---------------------------------------------- | MessageID | ConvoID | Sender |

为了简单地解释这一点,想象一个房间里挤满了人在互相交谈。一个人对另一个人所做的每一条语句都是该表中的一条记录,所有这些记录都有一个通过自动递增分配的唯一ID

然而,并不是这个房间里的每个人都在和其他人交谈。正在进行多个对话

这些对话之间必须是独一无二的。这将防止启动重复的会话ID,并防止站点收集不属于该用户的所有语句

或者,在图形表示中:

----------------------------------------------
| MessageID | ConvoID | Sender | Recipients | etc...
----------------------------------------------
|    1      |    1    |   A    |     B      |
----------------------------------------------
|    2      |    1    |   B    |     A      |
----------------------------------------------
|    3      |    2    |   C    |     D      |
----------------------------------------------
|    4      |    1    |   A    |     B      |
----------------------------------------------
|    5      |    2    |   D    |     C      |
----------------------------------------------
|    6      |    1    |   B    |     E      |
----------------------------------------------
|    7      |    3    |   E    |     F      |
----------------------------------------------
你可以看到这里发生的对话。。。A与B(ID 1)进行了交谈,B(ID 2)在C与D(ID 3)开始新对话(CID 2)的大约同一时间进行了回复

A最终就某事(ID 4)返回给B,D最终对C先前的询问(ID 5)做出回应。然后,B和E谈论他和A谈论的同一件事(CID 1),然后E右转并与F连接,开始一次全新的对话

如果这读起来像是在员工立即离职之前发生的步骤,那么这并不是故意的,但你并不孤单

因此,您可以看到每个DB条目都有一个唯一的ID(MessageID),但是这些消息需要很容易地整理在一起

我正在寻找的解决方案是允许DB创建一个新的、唯一的“covalid”。这就是为什么我们不能自动递增,或者为什么我们不能强制数据集的唯一性。重复必须发生,这是本专栏所做的事情的本质,但自动递增可能会做的,与我所寻求的正好相反

任何能为我指明正确方向的帮助都将不胜感激


谢谢

您可以通过添加
Conversations
表来规范设计。该表将有自己的自动递增列。每当一个新的对话开始时,您都会在
对话中添加一行,并将其标识符用作
corpaid

我不知道我是否真的得到了它,但为什么不使用发送者+接收者作为主键呢?或者,您可以添加一个唯一约束以确保发件人+收件人是唯一的。该约束应拆分为两个或多个表,但我不清楚确切的要求。如果确实要在单个表中执行此操作,请显式锁定该表,并在插入时使用MAX(convalid)+1作为新的convalid。但我不能推荐这个解决方案。嗯。。。这可能是最简单的方法。lqez提到的想法在我脑海中闪过(一个明确的锁),但我想避免这种情况,因为(我怀疑)他不能推荐。因此,一个带有唯一MessageID的“Messages”表,然后是一个单独的“Conversations”表——其中的每条记录都有自己唯一的a-I分配ID,后跟-比如-第二列逗号分隔的数字,表示Messages表中的MessageID。与我最初的想法相比,听起来更简单的解决方案,并寻求帮助。我打算先做几个测试,但我想我已经有答案了!谢谢测试,工作。正如我所期待的那样。非常感谢,安多玛!:-)