Есть ли способ сделать следующий запрос без подзапроса?Улучшить запрос подзапроса
SELECT * FROM
(
SELECT * FROM messaging_message WHERE recipient_id=4 ORDER BY timestamp DESC
) combined
GROUP BY thread_id HAVING status='unread'
Таблица:
`messaging_message`
- id
- thread_id
- content
- sender_id
- recipient_id
- timestamp
- status
ID Нить родительский поток для сообщений.
Обновление: При тестировании двух ответов до сих пор ни один запрос не генерирует результаты, которые мне нужны.
Запрос должен возвращать ТОЛЬКО те результаты, в которых самое последнее сообщение в сообщении thread = 'непрочитанное'. Оба этих запроса возвращают самый верхний результат ЛЮБОГО потока, который имеет сообщение со статусом = 'непрочитанный'.
То, что я пытаюсь сделать, это нечто вроде любого почтового ящика электронной почты, например Gmail. Предположим, что в папке «Входящие» отображается 25 потоков на первой странице. Я хочу выделить ТОЛЬКО те потоки, которые имеют самое последнее сообщение со статусом = 'непрочитанное' (игнорируя статус любого сообщения, более старого, чем самое последнее).
Вот почему я использую GROUP BY
на заказанные результаты, так что я получаю только самый последний результат, и из этих результатов, какой из них имеет статус = «непрочитанные»
(Примечание что я также изменил статус в вышеуказанном запросе от «удалено» до «непрочитанного», чтобы я мог сделать пояснение более понятным.)
Что такое 'thread_id'? Можете ли вы описать таблицу. Пожалуйста. – JHS
@Juniad См. Обновленный вопрос – David542
Что-то не так. Вам не нужно собирать все остальные столбцы не в группе? – wrschneider