Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Как в mySQL выбрать всех пользователей, с кем есть хотя бы одно сообщение и для каждого последнее сообщение

Практика




Как в 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

да, спасибо , так будет запрос лучше
создано: 2013-08-08
обновлено: 2021-03-13
132563



Рейтиг 10 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

MySql (Maria DB)

Термины: MySql (Maria DB)