-1

私人消息系统显示串联的用户消息。

• 用户发送和接收的消息按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";

返回一个错误。

4

1 回答 1

0

您正在从派生表中进行选择。在 MySQL 中,该子查询必须是别名:

SELECT ...
FROM ( SELECT ...) AS subqueryalias
                   ^^^^^^^^^^^^^^^^
WHERE ...
于 2011-09-02T19:33:42.577 回答