如何编写返回给定用户的最新消息的内部查询?

时间:2012-05-08 11:23:10

标签: mysql

我有一些像这样的表:

USERS TABLE:
| id | created | active | fname | lname |

MESSAGES TABLE:
| id | userId| active | date | content |

我正在尝试返回一些用户信息,以及最近为给定用户添加的消息。 以下是我要努力实现的结果结构:

| userId | userCreated | latestMessageDate| latestMessageContent |

以下查询返回用户信息:

SELECT 
user.id, 
user.created
FROM user
WHERE user.active = 1

...但是,我现在如何附上最新消息的日期以及实际的最新消息?

我认为使用内部查询就是这样一种方法,但是你如何编写这样的查询?

2 个答案:

答案 0 :(得分:2)

SELECT u.fname, u.lname, m.id, m.userID, m.datem, m.content
FROM USERS AS u
LEFT JOIN ( SELECT id, userID, date, content
            FROM MESSAGES
            WHERE active
            ORDER BY date DESC) AS m
ON u.id = m.userId
WHERE u.active
    # AND u.id = {$int_user_id}
GROUP BY u.id

答案 1 :(得分:1)

也许是这样的:

SELECT
    Users.id AS userId,
    Users.created AS userCreated,
    LatestMessage.LatestMessageDate,
    MESSAGES.content AS latestMessageContent 
FROM
    Users
    LEFT JOIN
    (
        SELECT
            MAX(date) AS LatestMessageDate,
            MESSAGES.userId
        FROM
            MESSAGES
        GROUP BY
            MESSAGES.userId
    ) AS LatestMessage
    ON Users.id=LatestMessage.userId
    LEFT JOIN MESSAGES
        ON LatestMessage.LatestMessageDate=MESSAGES.date
        AND LatestMessage.userId=MESSAGES.userId