Я перекопал весь стековерфлов и утомил гугл, но я так и не понял почему MySQL запрос (ниже) работает не правильно. Прошу протянуть руку помощи или швырнуть в лицо доку).
Задача:
Нужно получить самую свежую дату из таблицы статистики для каждого юзера.
ER-диаграмма (упрощенная):
SQL запрос:
SELECT U.*, S.*
FROM `user` AS U
LEFT JOIN stats AS S ON S.user_id = (
SELECT user_id
FROM stats AS S2
# Без этого условия джойнит одну запись, что и нужно. Но, соответственно, ID юзера не соответствует
WHERE S2.user_id = U.id
ORDER BY S2.date DESC
LIMIT 1
)
WHERE U.id = 1
Проблема:
Почему не работает LIMIT при условии WHERE в подзапросе?
Можно получить дату простым подзапросом, но мне нужно получить дополнительные поля, которые я не указывал в упрощенной схеме. И таких полей ~ 5, т.е. будет 5 подзапросов. Что будет быстрее не уверен, но пока склоняюсь что LEFT JOIN будет быстрее. Да и вопрос уже принципиален — пол дня убил.
Дамп БД на gist'e (30 строк) и
тот же дамп для скачивания.
Заранее спасибо за помощь.