Reputation: 2654
I have a table called sk_messages
.It's structure is like the following:
msg_id msg_from_user_id msg_to_user_id msg_text msg_date msg_status
1 12 14 hai... 23-12-2013 unread
2 12 14 .... ... unread
3 13 14 ... .. unread
My requirement is that I want to display all messages which are for the current user with a condition that single message should be displayed from a sender even if he sends multiple messages with the status unread.That is,from the above context, single message of the user having ID 12, should be displayed.I have tried the following query,but it doesnt work.
SELECT DISTINCT (msg_from_user_id), msg_text, msg_date
FROM sk_messages
WHERE msg_to_user_id = '$user_id'
AND msg_status = 'unread'
ORDER BY msg_date
$user_id is the id of the login user
Upvotes: 3
Views: 15436
Reputation: 607
Use this
SELECT msg_from_user_id,
msg_text, msg_date
FROM sk_messages
WHERE msg_to_user_id = '$user_id'
AND msg_status = 'unread'
ORDER BY msg_date GROUP BY msg_from_user_id
Upvotes: 0
Reputation: 27382
Try to group
user by id.
SELECT msg_text, msg_date
FROM sk_messages
WHERE msg_to_user_id = '$user_id'
AND msg_status = 'unread'
GROUP BY msg_from_user_id
ORDER BY msg_date
Tested code to get latest message
'SELECT * FROM ( SELECT * FROM message WHERE user_id = 1 ORDER BY created DESC LIMIT 1) as msg GROUP BY user_id '
Upvotes: 6
Reputation: 79979
Try this instead:
SELECT
m1.msg_from_user_id,
m1.msg_text,
m1.msg_date
FROM sk_messages AS m1
INNER JOIN
(
SELECT msg_from_user_id, MAX(msg_date) AS LatestDate
FROM sk_messages
WHERE msg_to_user_id = '$user_id'
AND msg_status = 'unread'
GROUP BY msg_from_user_id
) AS m2 ON m1.msg_from_user_id = m2.msg_from_user_id
AND m1.msg_date = m2.LatestDate
ORDER BY m1.msg_date;
Upvotes: 3