If I run the following MySQL command :
SELECT * FROM mail f where f.toUserId = 15 AND f.toUserDeleted=0 ORDER BY f.sentDate DESC limit 0,100000
I will get all messages in correct order, I can clearly see the last messages on top that was sent last.
I do however need to destict this search something like this :
SELECT
f.id,
f.fromUserId,
f.fromUserNickName,
f.readDate,
f.sentDate,
f.subject,
f.fromUserDeleted,
f.toUserId,
f.toUserDeleted,
(SELECT count(*) FROM mail m1 WHERE m1.fromUserId=f.fromUserId AND m1.toUserId=f.toUserId) as messageCount
FROM mail f
WHERE
f.toUserId = 15 AND
f.toUserDeleted=0
GROUP BY(f.fromUserId)
ORDER BY
f.sentDate
DESC
limit 0,100000
The problem is that this command will miss some users that was shown in the prev MySQL command?
EDit 1 :
I have tried this :
SELECT m1.*
FROM mail m1
LEFT JOIN mail m2 ON(m1.fromUserId = m2.fromUserId AND m1.sentDate < m1.sentDate)
WHERE m2.id IS NULL
ORDER BY m1.sentDate;
It takes forever, dont know if it is really returning anything.
Edit 2 :
Second try :
SELECT p1.id, p1.fromUserId, p1.fromUserNickName, p1.sentDate
FROM
mail p1
INNER JOIN
(SELECT pi.id, MAX(pi.sentDate) as latestDate FROM mail pi GROUP BY pi.fromUserId) p2
ON(p1.id = p2.id)
WHERE
p1.toUserId = 15
ORDER BY
p1.sentDate desc;
This do not return all users that have been sending mail to the user 15.
Edit 3:
Barmar´s second suggestions seemse to work :
SELECT m1.*, (SELECT count(*) FROM mail m3 WHERE m3.fromUserId=m1.fromUserId AND m3.toUserId=m1.toUserId) as messageCount
FROM mail m1
LEFT JOIN mail m2 ON (m1.fromUserId = m2.fromUserId
AND m1.sentDate < m2.sentDate
AND m2.toUserId = 15)
WHERE m2.id IS NULL
AND m1.toUserId = 15
ORDER BY m1.sentDate DESC;