Reputation: 638
Alright so I am trying to select only unique values from MySQL but I aint succeeding with it.
Basically I am trying to get LAST messages user received from all users
Query
SELECT DISTINCT private_messages.*,
users.ID AS userID,
users.username AS username,
profiles.img_url AS profileImage
FROM private_messages
INNER JOIN users ON users.username = private_messages.receiver
INNER JOIN profiles ON profiles.userID = users.ID
WHERE private_messages.sender ='Admin'
ORDER BY private_messages.sent_at DESC
Now the problem is, I want to select only last messages from receivers, not all of them
Current result
What I want to achieve?
Upvotes: 1
Views: 59
Reputation: 42853
If I correctly understand, if you have user bla
as receiver user, you need get all newest messages sent for him from all users.
If so, try this
SELECT private_messages.*,
users.ID AS userID,
users.username AS username,
profiles.img_url AS profileImage
FROM private_messages INNER JOIN (
SELECT MAX(id) as maxid from private_messages
where receiver = 'bla'
group by sender
) m
ON private_messages.id = m.maxid
INNER JOIN users ON users.username = private_messages.sender
INNER JOIN profiles ON profiles.userID = users.ID
ORDER BY private_messages.sent_at DESC
Upvotes: 0
Reputation: 133400
You shoudd filter for max (id)
SELECT DISTINCT private_messages.*,
users.ID AS userID,
users.username AS username,
profiles.img_url AS profileImage
FROM private_messages
INNER JOIN users ON users.username = private_messages.receiver
INNER JOIN profiles ON profiles.userID = users.ID
WHERE private_messages.sender ='Admin'
AND private_messages.id in ( select max(id)
from private_messages group by sender
)
ORDER BY private_messages.sent_at DESC
Upvotes: 1