【发布时间】:2011-11-09 10:28:59
【问题描述】:
私人消息系统显示串联的用户消息。
• 用户发送和接收的消息按 time_sent 排序
• 每个消息选项卡将显示发送者/接收者的姓名、消息和发送时间
• 有关如何提高查询速度(如索引等)的任何提示?
MESSAGES TABLE
--------------
id sender receiver time_sent message opened recipientDelete senderDelete
Users Table
-----------
id first_name last_name
我的尝试:
$userid = logged in user
$query="SELECT MAX(id), sender, receiver, MIN(time_sent), message, opened
FROM messages
WHERE (receiver='$userid' AND recipientDelete='0')
OR (sender='$userid' AND senderDelete='0')
GROUP BY receiver,sender
ORDER BY time_sent DESC LIMIT 8";
结果/问题:
如果登录用户 (id=3) 收到来自两个用户 (id=1,and id=2) 的消息,则此查询将返回来自用户 1 和 2 的消息
第二次尝试:
$query="SELECT MAX(id), sender, receiver, MIN(time_sent), message, opened
FROM ( SELECT
CASE WHEN sender = '$userid' THEN receiver ELSE sender END
MIN(time_sent)
FROM messages
WHERE sender = '$userid' OR receiver = '$userid'
GROUP BY CASE WHEN sender = '$userid' THEN receiver ELSE sender END)
ORDER BY time_sent DESC
LIMIT 8";
返回错误。
【问题讨论】:
-
第一个查询将错误消息组合在一起。例如,如果您(jason=user 1)正在查看您的收件箱,则查询会将您(用户 1)作为发送者或接收者的任何其他用户(2、3、4 等)分组。因此,在用户 1-2 和 1-3 之间发送的消息应该是 2 条单独的消息时,它们将组合为一条消息。
标签: php mysql private-messaging