Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Помогите, пожалуйста, сконструировать запрос - четвертый день голову ломаю.
Есть три таблицы - записи, фотографии к этим записям и комментарии к этим записям.
records (id)
photos (id, record_id, CreateDate)
comments (id, record_id, CreateDate)
Задача - выбрать последние 100 records, к которым были добавлены photos или comments. Упорядочить по дате последнего добавления любой информации. Указать что конкретно было добавлено - фото или коммент.
Итоговая таблица должна выглядеть так:
records.id, photos.id, photos.CreateDate, comments.id, comments.CreateDate.
Хочется получить в итоговой таблице по одной записи для каждой records.id
Дальше я предполагаю сравнивать CreateDate фото и комментария в каждой строке и что получится больше, то и добавлено.
Пробовал и через JOIN-ы и через вложенные запросы. В первом случае выдается не вся информация, как только я ввожу GROUP BY (теряются строки), во втором случае - не получается в одном запросе получать сразу и id фото или комментария, который был добавлен - придется делать еще один запрос.
Неактивен
Схитрите: выберите 100 строк из photos с сортировкой по дате (в обратную
сторону), аналогично из comments, а потом из получившихся 200 строк вы-
берите 100, отсортировав их в памяти.
Можно, конечно, сделать одним запросом
(ORDER BY IF(photos.CreateDate > comments.CreateDate, photos.CreateDate, comments.CreateDate) DESC),
но этот вариант будет работать без индексов.
Неактивен
Спасибо, я почему-то уперся в желание сделать это одним запросом и почти погиб
Кстати, сортировку я делал так:
SELECT ..., GREATEST(`photo`.`Date`, `comment`.`Date`) AS TGreat
...
ORDER BY TGreat DESC
Неактивен
Да, да, под вечер голова даже простейшие функции не вспоминает
Неактивен