Linas
Linas

Reputation: 4408

Set limit for MySQL query

I have query like this:

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

Now this query does what I need but my problem is with this line

ON (`all_messages`.`user_2` = `messages`.`from_user`)

It selects all data from messages where the matches was found but I need only one newest record. I hope you guys get what I mean.

Upvotes: 0

Views: 482

Answers (1)

Hector Sanchez
Hector Sanchez

Reputation: 2317

If you need one "newest record" you should have a date column or something, lets name it "CREATION_TIME", so you could do something like this

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

Edit

    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

It should work

Upvotes: 2

Related Questions