Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Сделал систему личных сообщений на сайте и мне надо выводить список диалогов с пользователями, отсортированный по дате последнего сообщения.
Есть тестовая таблица:
INSERT INTO `private` (`id`, `fromid`, `toid`, `message`, `posted`, `status`) VALUES
(64, 50136, 6, 'ьььььььььь', 1387275746, 1),
(65, 6, 50136, 'пум-пурум', 1387277848, 0),
(66, 37159, 52705, 'ььььььььььвв', 1387300276, 0),
(67, 35475, 6, 'ПППППППППППпппроверка!!!', 1387324208, 1),
(63, 50136, 35475, 'есть контакт', 1387275706, 1),
(61, 6, 5, 'ввввввввввв', 1387243801, 0),
(60, 35475, 50136, 'Ещё одна проверка...', 1387232868, 1),
(62, 6, 1171, 'ввв', 1387243848, 0),
(59, 6, 50136, 'Проверка связи...', 1387230582, 1);
Мой запрос такой:
(select distinct `fromid` from private where `toid`=$userID)
UNION
(select distinct `toid` from private where `fromid`=$userID) limit 20
Он выводит id пользователей, с которыми у меня есть диалог (может только я им написал, может только они мне написали, а может оба друг другу написали). По этим уникальным id я потом вывожу инфу.
Задача:
сделать сортировку по дате последнего сообщения.
Когда делаю так:
(select distinct `fromid` from private where `toid`=$userID)
UNION
(select distinct `toid` from private where `fromid`=$userID) order by posted desc limit 20
то конечно выходит ошибка, т.к. posted нет в выборках. Как правильно сделать?
Неактивен
Попробуйте
( SELECT `fromid`,max(`posted`) p FROM `private` WHERE `toid` = 6 GROUP BY `fromid` )
UNION
( SELECT `toid`,max(`posted`) p FROM `private` WHERE `fromid` = 6 GROUP BY `toid` )
ORDER BY p;
Неактивен
Тогда выводит:
fromid p По возрастанию
5 1387243801
1171 1387243848
50136 1387275746
50136 1387277848
35475 1387324208
Т.е. 50136 2 раза (это переписка 50136 -> 6 и 6 -> 50136), надо, чтобы этот id был один раз.
Неактивен
Сделал так:
select distinct fromid from(
( SELECT `fromid`,max(`posted`) p FROM `private` WHERE `toid` = 6 GROUP BY `fromid` )
UNION
( SELECT `toid`,max(`posted`) p FROM `private` WHERE `fromid` = 6 GROUP BY `toid` )
ORDER BY p desc) res
Неактивен
Страниц: 1