0

我创建了一个收件箱系统。登录用户可以向其他登录用户发送消息。数据库中的 usermessage 表有两个字段 1. userid 和 2. messageid。以下是该表的摘录。

userid | messageid
12     | 1
13     | 1
14     | 2
15     | 2
12     | 3
15     | 3
12     | 4
14     | 4

在上述情况下,当用户 '12' 向用户 '13' 发送消息时。我希望 messageid '1' 移动到表格底部,这样当用户 '12' 或 '13' 检查他的邮箱时,messageid '1' 需要作为最近的对话出现在收件箱的顶部。到目前为止,我已经能够通过删除 messageid '1' 并作为每个用户 ID 的新查询插入来实现这一点。这是我的代码:

DELETE FROM usermessage WHERE userid = '12' and messageid = '1';
INSERT INTO usermessage SET userid = '12', messageid = '1';
DELETE FROM usermessage WHERE userid = '13' and messageid = '1';
INSERT INTO usermessage SET userid = '13', messageid = '1';

是否可以通过一个查询完成此操作。到目前为止,我无法在堆栈流中找到与我的问题相关的任何明确答案。

4

1 回答 1

0

在没有 SORT 语句的情况下查询行不能保证它们将按照创建的时间顺序进行排序。从现在开始,MySQL 为您提供这样的排序行为只是一个机会。

因此,您有必要找到或创建一个客观的排序规则。它可以是消息的时间戳,也可以是 [usermessage] 表中的新时间戳列。

同样值得注意的是,删除和重新创建行会影响 MySQL 进程成本,因为每次删除和插入时 MySQL 都需要更新 [usermessage] 表上的索引。

于 2012-03-28T23:17:37.677 回答