设置MySQL查询的限制

设置MySQL查询的限制,mysql,sql,Mysql,Sql,我有这样的疑问: SELECT `all_messages`.`user_1`, `messages`.*, `users`.`username` FROM `all_messages` JOIN `messages` ON (`all_messages`.`user_2` = `messages`.`from_user`) JOIN `users` ON (`all_messages`.`user_2` = `users`.`id`) WHERE `all_messages`.`user

我有这样的疑问:

SELECT `all_messages`.`user_1`, `messages`.*, `users`.`username` 
FROM `all_messages` 
JOIN `messages` ON (`all_messages`.`user_2` = `messages`.`from_user`) 
JOIN `users` ON (`all_messages`.`user_2` = `users`.`id`)
WHERE `all_messages`.`user_1` = '12' 
ORDER BY `messages`.`sent` DESC LIMIT 2
现在这个查询满足了我的需要,但我的问题是这行

ON (`all_messages`.`user_2` = `messages`.`from_user`)
它从找到匹配项的
消息中选择所有数据,但我只需要一条最新记录。我希望你们明白我的意思。

如果你需要一张“最新记录”,你应该有一个日期栏或什么的,让我们把它命名为“创建时间”
,这样你就可以这样做了

SELECT AM.user_1, M.*, U.username 
FROM all_messages AM, messages M , users U
WHERE AM.user_1 = '12' 
AND  AM.user_2 = M.from_user
AND  AM.user_2 = U.id
AND M.CREATION_TIME =
( 
  SELECT MAX(CREATION_TIME)
  FROM messages 
  WHERE from_user= M.from_user
)
ORDER BY M.sent DESC LIMIT 2
编辑

    SELECT AM.user_1, M.*, U.username 
    FROM all_messages AM, messages M, users U
    WHERE AM.user_1 = '12' 
    AND  AM.user_2 = M.from_user
    AND  AM.user_2 = U.id
    AND M.sent =
    ( 
      SELECT MAX(sent)
      FROM messages 
      WHERE from_user= M.from_user
    )
    ORDER BY M.sent DESC LIMIT 2

它应该可以工作

所有的_消息都有时间戳吗?这是不是因为速度太慢而造成的问题?要仅获取一个值,您可以在接收语言(php、java、perl等)中执行此操作。所有消息都有日期,是的,如果我将其保留为这种方式,则速度会变慢,可能会有约1000个匹配项,我只需要最后一条消息。我仍然会收到相同的错误,如果它有助于
sent
字段是创建日期
2012-01-10 19:59:33
Mm我看了看,没有问题,你复制粘贴得好吗?除息的