Mysql с использованием DISTINCT только на 2 поля - PullRequest
0 голосов
/ 08 июля 2011

У меня есть таблица базы данных mysql следующим образом

id | UID | туид | сообщение | время

В этой базе данных есть сообщения, отправленные одним человеком другому. Мне нужно получить последние сообщения, переданные между мной и всеми другими пользователями.

В настоящее время я использую запрос следующим образом:

SELECT uid, touid, message, time
FROM messages
WHERE uid = "'.$currentuser.'"
    OR touid = "'.$currentuser.'"
ORDER by time DESC;

Который получит все сообщения между мной и любым другим пользователем. Но мне нужно показывать только самые последние сообщения, передаваемые между мной и всеми другими пользователями.

Он пытался использовать GROUP BY, но это влияет на порядок. Так есть ли другое решение?

Есть идеи? Если мне не ясно, пожалуйста, прокомментируйте

Ответы [ 4 ]

1 голос
/ 08 июля 2011
SELECT 
  m1.*
FROM 
  messages m1
 JOIN 
  (SELECT UID, TOUID, MAX(time) time FROM messages GROUP BY UID, TOUID) m2
 ON m1.UID=m2.UID AND m1.TOUID=m2.TOUID and m1.time=m2.time
WHERE 
  m1.uid = "'.$currentuser.'"
ORDER BY
  m1.time DESC;
0 голосов
/ 08 июля 2011
SELECT uid,touid,message,time
FROM messages AS m
JOIN (
    SELECT uid,touid,MAX(time) AS time
    FROM messages
    WHERE uid = "'.$currentuser.'"
        OR touid = "'.$currentuser.'"
) AS x ON (m.uid=x.uid,m.touid=x.touid,m.time=x.time)
ORDER BY time DESC;
0 голосов
/ 08 июля 2011

попробуйте использовать, чтобы вырезать ненужные строки

limit 1
0 голосов
/ 08 июля 2011

Добавьте LIMIT 1 в конце вашего запроса.

...