PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Interroga per ottenere le ultime conversazioni per la posta in arrivo dell'utente

Secondo quanto ho capito, è necessario ricevere l'ultimo messaggio della conversazione in base all'utente (delle ultime 10 conversazioni più recenti)

Aggiornamento: Ho modificato la query per ottenere il latest_conversation_message_id per ogni conversazione utente

La query seguente ottiene i dettagli per user_id = 2 , puoi modificare users.id = 2 per ottenerlo per qualsiasi altro utente

SQLFiddle , spero che questo risolva il tuo scopo

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

Informazioni: La query ottiene l'ultimo messaggio di ogni conversazione con qualsiasi altro utente, If user_id 2 , invia un messaggio a user_id 3 , anche questo viene visualizzato, in quanto indica l'inizio di una conversazione. Viene visualizzato l'ultimo messaggio di ogni conversazione con qualsiasi altro utente