设置mysql查询的限制

时间:2012-01-10 20:20:56

标签: sql mysqli

我有这样的查询:

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`)

它从messages中选择找到匹配项的所有数据,但我只需要一条最新记录。我希望你们明白我的意思。

1 个答案:

答案 0 :(得分:2)

如果您需要一个“最新记录”,您应该有一个日期列或其他内容,请将其命名为"CREATION_TIME",这样您就可以执行此类操作

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

应该有效