我正在创建一个消息系统(使用PHP),并且想要为每条消息分配一个ID号(除了每条具有唯一ID号的实际消息)......但是,如果有人回复了消息,那么我想能够给该消息提供与正在回复的消息相同的ID ...那么我当然可以按时显示它们并按顺序显示它们。MySQL覆盖auto_increment?
所以,如果我给这个领域的auto_increment类型是能够被覆盖?
含义...每个新消息具有自动值,例如, 1,2,3等,但有人回复2号,所以它的ID也需要2
或者是否有更好的方法来做到这一点?
我正在创建一个消息系统(使用PHP),并且想要为每条消息分配一个ID号(除了每条具有唯一ID号的实际消息)......但是,如果有人回复了消息,那么我想能够给该消息提供与正在回复的消息相同的ID ...那么我当然可以按时显示它们并按顺序显示它们。MySQL覆盖auto_increment?
所以,如果我给这个领域的auto_increment类型是能够被覆盖?
含义...每个新消息具有自动值,例如, 1,2,3等,但有人回复2号,所以它的ID也需要2
或者是否有更好的方法来做到这一点?
绝对没有什么能够阻止您将任意值分配给AUTO_INCREMENT
列。如有必要,表格计数器会相应调整。
但是,您不能将AUTO_INCREMENT
设置为不唯一的列。
老实说,我不明白你的设计。一个典型的消息传递系统看起来像这样:
message_id in_reply_to
========== ===========
1 NULL
2 NULL
3 1
4 NULL
5 1
6 3
7 NULL
复制ID类型会击败使用ID的目的。
更新#1: OMG,似乎它实际上可以在某些情况下进行:
对于MyISAM表,你可以在一个多列索引在次级柱 指定AUTO_INCREMENT。在这种情况下,对于 AUTO_INCREMENT列的生成值计算为MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。当您想要将数据 置于有序组中时,这非常有用。
http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html
更新#2:对于记录,我只是测试它,你可以在InnoDB表使用重复的自动递增的ID,以及:
CREATE TABLE foo (
foo_id INT(10) NOT NULL DEFAULT '0',
bar_id INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (foo_id),
INDEX bar_id (bar_id)
)
ENGINE=InnoDB
谢谢 - 非常感谢! –
@DarrenSweeney - 如果您对这个主题感兴趣,我建议您阅读手册页I链接。很多人都没有意识到“AUTO_INCREMENT”的许多细节,包括我在内。 –
这真的很有趣。绝对要根据我自己的知识来阅读。感谢您的研究/测试,@ÁlvaroG.Vicario –
不,auto_increment列不能出现多次。
正是我要说的 –
我会保持每个消息ID唯一 - 无论是通过自动增量还是通过uuid。在消息结构中为thread_id添加一个额外的列 - 在创建时是唯一的,然后让所有回复都包含此thread_id以将它们逻辑链接在一起。
的你会这样做的方式是在你的表中有另一列叫parent_id
或类似的东西。
原始消息的parent_id为NULL。
然后,当任何人发布消息的回复时,消息的原始ID将进入新消息的parent_id
列。例如:
id text parent_id created_at
============================================
1 'Lorem ipsum' null [time]
2 'Lorem ipsum' 1 [time]
3 'Lorem ipsum' 1 [time]
你甚至可以更进一步,有答复嵌套:
id text parent_id created_at
============================================
1 'Lorem ipsum' null [time]
2 'Lorem ipsum' 1 [time]
3 'Lorem ipsum' 2 [time]
在后一种情况下,你可能需要某种形式的递归函数来获取所有嵌套消息;第一种方法比较简单。
非常感谢,感谢 –
放置唯一ID的最佳方法是;添加uniqid(rand())。
添加另一个字段,例如'conversation_id'或类似的东西。 auto_increment用于_unique_标识符。 – VolkerK
为什么不添加一个名为“reply_id”的额外字段并添加您要回复的消息的ID? – Flukey
@VolkerK是的,但我如何分配一个ID? –