-1

連結されたユーザー メッセージを表示するプライベート メッセージング システム。

• ユーザーが送信および受信したメッセージを time_sent 順にグループ化
• 各メッセージ タブに送信者/受信者の名前、メッセージ、および 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) が 2 人のユーザー (id=1、および id=2) からメッセージを受信した場合、このクエリはユーザー 1 と 2 から送信されたメッセージを返します。

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 に答える