и не хватает в таблицу заполнить id - Индификатор сообщения user_id - Индификатор получателя user_sender_id - индификатор отправителя message - сообшения time - время отправления
Вот и берем свой user_id и групируем sender и выводит 1 последный на время или индификатор. Логика не вижу сложно!
SELECT `mail`.`id_sender`, MAX(`mail`.`time`) AS `time`, MIN(`mail`.`is_read`) AS `is_read`, COUNT(`mail`.`id`) AS `count` FROM `mail` WHERE `mail`.`id_user` = ? GROUP BY `mail`.`id_sender` ORDER BY `time` DESC