Как в mySQL выбрать всех пользователей, с кем есть хотя бы одно сообщение и для каждого последнее сообщение
SELECT
a.*,
u.username ,
u.pics AS pic,
u.id
FROM message a
INNER JOIN (SELECT
fromuserId, MAX(`date`) AS Max_time,
IF(fromuserId != 14, fromuserId, foruserId) AS user_notme
FROM message
WHERE (fromuserId = 14 OR foruserId = 14) AND (fromuserId <> foruserId)
GROUP BY user_notme) b
on ( a.`date`=b.Max_time)
JOIN user u
ON (u.id = IF(a.fromuserId != 14, a.fromuserId, a.foruserId))
WHERE ( foruserId != 14)
LIMIT 0, 10
находить последнее сообщение лучше не по времени , а по ид,
во первых избавитесь с проблемой перевода времени и правильной сортировкой сообщений ,
а во вторых с проблемой сообщений с одинаковым временем, у вас главный запрос будет дублировать список контактов
поэтому предлагаю сделать так
SELECT
a.*,
u.username ,
u.pics AS pic,
u.id
FROM message a
INNER JOIN (SELECT
fromuserId, MAX(id) AS max_id,
IF(fromuserId != 14, fromuserId, foruserId) AS user_notme
FROM message
WHERE (fromuserId = 14 OR foruserId = 14) AND (fromuserId <> foruserId)
GROUP BY user_notme) b
ON (a.id = b.max_id)
JOIN user u
ON (u.id = IF(a.fromuserId != 14, a.fromuserId, a.foruserId))
WHERE ( foruserId != 14)
LIMIT 0, 10
да, спасибо , так будет запрос лучше
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)