Если я запускаю следующую команду MySQL:Выберите только один из каждой «группы»
SELECT * FROM mail f where f.toUserId = 15 AND f.toUserDeleted=0 ORDER BY f.sentDate DESC limit 0,100000
я получить все сообщения в правильном порядке, я могу ясно видеть последние сообщения на вершине, что было отправлено в прошлом.
Однако я должен destict этот поиск что-то вроде этого:
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
Проблема заключается в том, что эта команда будет не хватать некоторых пользователей, что было показано в команде пред MySQL?
РЕДАКТИРОВАТЬ 1:
Я попытался это:
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;
Он принимает навсегда, не знаю, если это действительно возвращение ничего.
Edit 2:
Вторая попытка:
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;
Это не возвращает всех пользователей, которые были отправить почту пользователю 15.
Edit 3:
Barmar' Второе предложение выглядит следующим образом:
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;
Это должно получить одно сообщение для каждого пользователя, если у вас есть более чем 100000 пользователей. – Barmar
Я подозреваю, что это ваш реальный вопрос: http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group – Barmar
@Barmar Да, теперь я вижу, что вы правы. Проблема в том, что он не выбирает новейшее сообщение от каждого пользователя, и это создает странный порядок сортировки. Как это можно решить? – Banshee