SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.12.2010 21:52:18

Павел_eg
Участник
Зарегистрирован: 09.12.2010
Сообщений: 2

Сложная выборка из трех таблиц

Здравствуйте.
Помогите, пожалуйста, сконструировать запрос - четвертый день голову ломаю.

Есть три таблицы - записи, фотографии к этим записям и комментарии к этим записям.
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 фото или комментария, который был добавлен - придется делать еще один запрос.

Неактивен

 

#2 09.12.2010 22:21:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сложная выборка из трех таблиц

Схитрите: выберите 100 строк из photos с сортировкой по дате (в обратную
сторону), аналогично из comments, а потом из получившихся 200 строк вы-
берите 100, отсортировав их в памяти.

Можно, конечно, сделать одним запросом
(ORDER BY IF(photos.CreateDate > comments.CreateDate, photos.CreateDate, comments.CreateDate) DESC),
но этот вариант будет работать без индексов.

Неактивен

 

#3 09.12.2010 23:23:15

Павел_eg
Участник
Зарегистрирован: 09.12.2010
Сообщений: 2

Re: Сложная выборка из трех таблиц

Спасибо, я почему-то уперся в желание сделать это одним запросом и почти погиб smile
Кстати, сортировку я делал так:
SELECT ..., GREATEST(`photo`.`Date`, `comment`.`Date`) AS TGreat
...
ORDER BY TGreat DESC

Неактивен

 

#4 10.12.2010 00:06:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сложная выборка из трех таблиц

Да, да, под вечер голова даже простейшие функции не вспоминает smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson