php mysql объединяет отправленные и полученные сообщения - PullRequest
0 голосов
/ 02 сентября 2011

Личная система обмена сообщениями, отображающая объединенные сообщения пользователей.

• Пользователи отправляли и получали сообщения, сгруппированные вместе, упорядоченные по 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) получает сообщения от двух пользователей (id = 1 и 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";

Вернул ошибку.

1 Ответ

0 голосов
/ 02 сентября 2011

Вы выбираете из производной таблицы. В MySQL этот подзапрос должен иметь псевдоним:

SELECT ...
FROM ( SELECT ...) AS subqueryalias
                   ^^^^^^^^^^^^^^^^
WHERE ...
...