外国身份证的左联接明显

时间:2013-09-12 08:29:15

标签: php mysql sql cakephp

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

我的消息表中的字段是:

id|to|from|body|timestamp

to =当前用户ID

来自=发件人用户ID

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

来自不同用户的每封邮件还应用户详细信息加入

另外,如果你能够证明这在CakePHP中是如何工作的那将是很棒的......!如果没有,只需SQL执行:)

1 个答案:

答案 0 :(得分: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

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

update )如果您想获得最大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` 

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