2012-05-08 4 views
0

私はこのようないくつかのテーブルを持っている:特定のユーザーの最新のメッセージを返す内部クエリを書き込む方法はありますか?

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

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

私は与えられたユーザのための最も最近追加されたメッセージとともに、一部のユーザー情報を返すようにしようとしています。以下 は私が達成していますrying結果の構造である:

| userId | userCreated | latestMessageDate| latestMessageContent | 

次のクエリは、ユーザー情報を返します:

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

を...しかし、どのように私は今の日付を添付してください最新のメッセージと実際の最新のメッセージ?

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

答えて

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

このような何か:

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 
関連する問題