Zgodnie z moim zrozumieniem, musisz otrzymać najnowszą wiadomość z rozmowy na użytkownika (z ostatnich 10 ostatnich rozmów)
Aktualizacja: Zmodyfikowałem zapytanie, aby uzyskać latest_conversation_message_id
za każdą rozmowę użytkownika
Poniższe zapytanie pobiera szczegóły dla user_id = 2
, możesz zmodyfikować, users.id = 2
aby otrzymać go dla każdego innego użytkownika
SQLFiddle , mam nadzieję, że to rozwiąże Twój cel
SELECT
user_id,
users.name,
users2.name as sent_from_or_sent_to,
subquery.text as latest_message_of_conversation
FROM
users
JOIN
(
SELECT
text,
row_number() OVER ( PARTITION BY user_id + recipient_id ORDER BY id DESC) AS row_num,
user_id,
recipient_id,
id
FROM
private_messages
GROUP BY
id,
recipient_id,
user_id,
text
) AS subquery ON ( ( subquery.user_id = users.id OR subquery.recipient_id = users.id) AND row_num = 1 )
JOIN users as users2 ON ( users2.id = CASE WHEN users.id = subquery.user_id THEN subquery.recipient_id ELSE subquery.user_id END )
WHERE
users.id = 2
ORDER BY
subquery.id DESC
LIMIT 10
Informacje: Zapytanie pobiera najnowszą wiadomość z każdej rozmowy z dowolnym innym użytkownikiem, Jeśli user_id 2
, wysyła wiadomość do user_id 3
, który również jest wyświetlany, ponieważ wskazuje początek rozmowy. Wyświetlana jest najnowsza wiadomość z każdej rozmowy z dowolnym innym użytkownikiem