Получить список пользователей и время их последнего сообщения
Нужно получить список последних сообщений пользователя (отправленные ему и им самим).
Структура базы данных:
- _id
- from - отправитель
- to - получатель
- sdate - время отправки
- message - текст сообщения
На данный момент использую такой вариант:
$users = Array();
$mails = $db->mail->find(array('$or' => array(array('from' => $my['_id']),array('to'=>$my['_id']))));
foreach ($mails AS $msgs) {
if ($msgs['from'] == $my['_id']) {
$tUser = $msgs['to'];
} else {
$tUser = $msgs['from'];
}
$users[$tUser] = Array(
"id"=>$tUser,
"time"=>toTime(strtotime($msgs['sdate'])),
"unix"=>strtotime($msgs['sdate'])
);
}
function _sorta($a, $b) {
if ($b['unix'] > $a['unix']) return 1;
}
usort($users, '_sorta');
Скрипт просто пробегается по всем сообщениям и записывает/заменяет уже записанное значение _id на массив с данными последнего сообщения и после чего сообщения сортируются по времени. Однако этот вариант не подходит, скрипт выполняется очень много времени, если пользователь получил более 1000 сообщений.
Собственно, нужно получить одним запросом список пользователей и последнее сообщение от них, не пробегаясь по всем сообщениям.