-1

我需要从每个“用户”中找到最新的“消息”并列出它们(如 iPhone 等的对话收件箱)。

我的消息表中的字段是:

id|to|from|body|timestamp

to = 当前用户 ID

来自 = 发件人用户 ID

我将如何构建一个查询,以获取“来自”字段唯一的每个不同用户的最新帖子?显然,第一个条件是“to”字段与当前用户 ID 匹配。

来自不同用户的每条消息还应将用户详细信息加入结果中。

此外,如果您能够演示这将如何在 CakePHP 中工作,那将是非常棒的......!如果没有,只有 SQL 应该做:)

4

1 回答 1

1

您可以将 SQL 与子查询一起使用,例如:

SELECT
  messages.*,
  max_stamps.max_stamp
FROM
  (SELECT 
    MAX(timestamp) as max_stamp, 
    `from` 
   FROM 
     messages 
   WHERE
     messages.`to`=$currentUser
   GROUP BY 
    `from`
  ) as max_stamps
  LEFT JOIN
    messages
    ON messages.`from`=max_stamps.`from` 
       AND max_stamps.max_stamp=messages.timestamp

-ie首先在子查询中选择最大时间戳,然后将它们用于主表。

更新)如果你想获得最大值id,然后使用它MAX()

SELECT
  messages.*,
  max_ids.max_id
FROM
  (SELECT 
    MAX(id) as max_id,
    `from` 
   FROM 
     messages 
   WHERE
     messages.`to`=$currentUser
   GROUP BY 
    `from`
  ) as max_ids
  LEFT JOIN
    messages
    ON messages.`from`=max_ids.`from` 

编辑:误解idfrom含义to。提示:用 MySQL 保留字命名表/列可能会引起麻烦(至少你必须用反引号括起来)。

于 2013-09-12T08:35:47.620 回答