私人消息系统显示串联的用户消息。
• 用户发送和接收的消息按time_sent 排序
• 每个消息选项卡将显示发送者/接收者的姓名、消息和时间_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";
返回一个错误。