0

私はこのようないくつかのテーブルを持っています:

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

...しかし、実際の最新のメッセージと一緒に、最新のメッセージの日付を添付するにはどうすればよいですか?

内部クエリを使用することはそのようなアプローチの1つだと思いますが、そのようなクエリをどのように記述しますか?

4

2 に答える 2

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
于 2012-05-08T11:27:05.717 に答える
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
于 2012-05-08T11:39:56.580 に答える