【发布时间】:2012-03-28 22:49:47
【问题描述】:
我创建了一个收件箱系统。登录用户可以向其他登录用户发送消息。数据库中的 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';
是否有可能通过一个查询来完成这项工作。到目前为止,我无法在 stackflow 中找到任何与我的问题相关的明确答案。
【问题讨论】:
-
天啊。您听说过规范化数据和良好的相对数据库设计吗?
-
使用 usermessage 表上的时间戳字段(使用类似 ON UPDATE CURRENT_TIMESTAMP 之类的东西)和选择显示收件箱的更明智的 ORDER BY 会更好地实现这一点。
-
不应该 12 发送到 13 只是创建一个新行,你不应该回收消息 ID。
-
@heximal 你的批评性评论有什么帮助?请更具建设性。链接,示例任何内容。
-
@heximal 虽然我完全同意,但我希望普通表单在这个优先级列表中排在后面:-)
标签: php mysql sql-insert sql-delete inbox