0

好的,所以我一直在试图找出解决我的用户收件箱的方法。

基本上,当用户查看他们的收件箱时,我希望它显示每个已向他们发送消息的用户的最后一条消息。例如,如果 John 给 Jane 发送消息“消息 1”、“消息 2”、“消息 3”。Jane 将在她的收件箱中看到最后一条消息“消息 3”。我的意图是当她单击该消息时,她会看到整个线程(我已将其排除)。我实际上部分有这个工作,但有一个问题。如果 John 随后向 Sarah 发送消息“消息 1”、“消息 2”、“消息 3”,则该查询将对 Sarah 有效,但对 Jane 将不再有效。

我似乎无法弄清楚。这是我到目前为止所拥有的。任何建议将不胜感激。

SELECT t1.*, u.username as from_username, u.user_type as from_usertype, 
     p.profile_picture 
FROM messages t1
JOIN (
    SELECT from_id, MAX(date) date
    FROM messages
    GROUP BY from_id
) t2 ON t1.from_id = t2.from_id AND t1.date = t2.date
LEFT JOIN users u ON u.id = t1.from_id
LEFT JOIN profiles p ON p.user_id = t1.from_id
WHERE t1.to_id = '{$loggeduser}'
    AND t1.deleted = '0'
LIMIT {$pagination->items_per_page}
OFFSET {$pagination->offset}
4

1 回答 1

0
SELECT  m.*,
        u.username as from_username, u.user_type as from_usertype, 
        p.profile_picture 
FROM    (
        SELECT  DISTINCT
                from_id
        FROM    messages
        WHERE   to_id = $loggeduser
                AND deleted = 0
        ) md
JOIN    messages m
ON      m.id =
        (
        SELECT  id
        FROM    messages mi
        WHERE   mi.to_id = $loggeduser
                AND mi.from_id = md.from_id
                AND mi.deleted = 0
        ORDER BY
                mi.to_id DESC, mi.from_id DESC, mi.date DESC, mi.id DESC
        LIMIT 1
        )
JOIN    users u
ON      u.id = md.from_id
JOIN    profiles p
ON      p.user_id = md.from_id
于 2013-09-25T19:29:32.923 回答