2013-05-20 8 views
1

Я уже обыскал stackoverflow, но существующие потоки не помогли мне, поэтому я опубликовал это.MySQL - Получить последнее сообщение от всех пользователей

Моя схема базы данных:

user: user_id, displayname 
message: id, sender_id, receiver_id, message, dateSent 

Что я хочу:

Покажите мне список последнего сообщения от каждого пользователя WHERE receiver_id = 4

Что я уже проверено:

MYSQL select newest posts from tables query to get last message only from all users

До сих пор не может решить мою проблему :(

+0

Взгляните на это: HTTP://stackoverflow.com/questions/2109449/creating-a-messaging-system-in-db-most-especially- mysql? rq = 1 –

+0

также что такое id, sender_id, receiver_id в сообщении. нам нужно знать отношение назад к «пользователю» – Drew

+0

ПОПРОБУЙТЕ этот «ВЫБОР». u. * FROM пользователь u внутреннее сообщение соединения m ON u.user_id = m.sender_id WHERE receiver_id = 4' .... – Meherzad

ответ

2

Попробуйте это:

SELECT 
    u1.displayname AS SenderName, 
    m.date_sent, 
    ... 
FROM messages AS m1 
INNER JOIN users AS u1 ON m1.sender_id = u1.id 
(
    SELECT sender_id, MAX(dateSent) MaxDate 
    FROM messages 
    GROUP BY sender_id 
    WHERE receiver_id = 4 
) AS m2 ON m1.sender_id = m2.sender_id 
     AND m1.datesent = m2.maxdate 
+0

Это дает мне синтаксическую ошибку (неожиданный SELECT) – CBergau

+0

@CBergau - Не могли бы вы показать мне точный запрос, который вы пробовали? –

+0

ВЫБОР m1. * из сообщений, когда m1 INNER JOIN пользователей, так как u1 = О m1.sender_id u1.id ( SELECT, sender_id, MAX (dateSent) MaxDate из сообщений GROUP BY sender_id ГДЕ receiver_id = 4 ) AS m2 ON m1.id = m2.id И m1.datesent = m2.maxdate – CBergau

0
SELECT u.user_id, u.displayname, m.message 
FROM user u 
INNER JOIN 
(SELECT id, sender_id, receiver_id, message, MAX(dateSent) AS mdate 
FROM message msg 
WHERE receiver_id = 4 
GROUP BY sender_id 
) as m 
ON u.user_id = m.sender_id AND u.dateSent = m.mdate

НТН

+0

Извините, где вы определили «нас»? – CBergau

+0

Извините, это была опечатка! Ответ обновлен –

0
SELECT m.id, MAX as mDate, m.sender_id, u.displayname 
FROM message m 
LEFT JOIN user u ON u.user_id = m.sender_id 
WHERE m.receiver_id = 4 
GROUP BY sender_id 
Смежные вопросы