Я пытаюсь сделать запрос mysql, который получает последний элемент в предложении group by. Однако, когда я группирую, это дает мне первую запись. Я пробовал много объединений и много поисков, но не могу найти правильный способ сделать это.
Моя база данных устроена так:
Сообщения:
- идентификатор_сообщения *
- thread_id
- ID пользователя
- сообщение
- создано в
пользователи:
- ID пользователя*
- имя
потоки:
- thread_id*
- имя
пользовательские темы:
- id*
- ID пользователя
- thread_id
Запрос, который я пытаюсь сделать, должен быть предоставлен user_id:
- threads.thread_id
- пользователи.имя
- сообщения.сообщение
- messages.created_at
Загвоздка здесь в том, что для users.name мне нужно не предоставленное имя пользователя, а другое имя пользователя, которое есть в потоке. Мой текущий удар по нему прямо сейчас выглядит так:
select t.thread_id as thread, t.name as name, messages.message as message, max(messages.created_at) as date
from (SELECT threads.thread_id, nt.name
FROM threads,messages,
(SELECT users.name as name, usersthreads.thread_id as threadID
from users,usersthreads
where users.user_id=usersthreads.user_id
and users.user_id!='$userID') as nt
WHERE threads.thread_id=messages.thread_id
and nt.threadID=threads.thread_id
AND messages.user_id=$userID
GROUP BY messages.thread_id) as t
inner join messages
on t.thread_id = messages.thread_id
group by t.thread_id
order by date DESC
И проблема с этим запросом заключается в том, что он возвращает то, что мне нужно, но сообщение, которое возвращается для каждого потока, является первым сообщением потока, а не последним ("самым последним") сообщением. Спасибо.