Может ли кто-нибудь помочь мне с таким типом запросов.MySQL: Каскадная фильтрация по датам
у меня есть:
posts
столcomments
стол
Они связаны между собой через comments.post_id = posts.post_id
колонн.
Я пользователь может фильтровать почту по комментариям к прошлому:
- 1 час
- 24 часа
- 2 дня и т.д.
Если пользователь выбрал, чтобы показать сообщения для Прошло 1 час, но там нет сообщений в этот период, мы должны сделать шаг за шагом:
Выберите пост за прошлым 1 hour
, если пустой - за прошлый 24 hours
, если пустой - за прошлый 2 days
, если пустой - с момента создания (без каких-либо условий).
Может ли кто-нибудь помочь мне построить такой запрос?
UPD
"Фильтровать сообщения от комментариев" означает сортировку по комментариям сосчитать.
Таким образом, цель - запрос «Показывать сообщения, отсортированные по количеству комментариев, оставленным в течение последних XXX часов».
И если выбрано "for the past hour", но нет записей с комментариями, оставленными в течение последних 1 часа, нам нужно получать сообщения с комментариями, оставленными в течение последних 24 часов (отсортировано по количеству комментариев) и так далее ,
Таблицы Структура
Сообщений:
- POST_ID
- название
- содержание
- DATE_ADDED
Комментарии
- comment_id
- содержание
- POST_ID
- DATE_ADDED
Так ссылка posts.post_id = comments.post_id
.
Я хотел бы иметь следующий результат, когда мнение пользователя самые комментируемые сообщения за последний час:
posts.post_id | comments_count | posts.date_added | group
---------------+----------------+------------------+----------------
156 | 8 | 2013-04-02 | hour
154 | 3 | 2013-04-02 | hour
129 | 1 | 2013-03-10 | 24 hours
13 | 14 | 2013-02-18 | 48 hours
138 | 6 | 2013-03-29 | week
137 | 4 | 2013-03-29 | week
161 | 21 | 2013-04-11 | month
6 | 2 | 2013-01-24 | year
103 | 8 | 2013-03-02 | since inception
Результаты отсортированы по:
- Начало списка является 2 сообщений, которые были комментируемые из-за прошедшего часа, и упорядочивается по комментариям.
- Далее мы размещаем сообщения, которые были прокомментированы из-за прошедшего дня.
- Далее - посты комментировали из-за последние 2 дня
- сообщений комментируемых из-за прошедшую неделю, и снова они должны быть упорядочены по комментариям подсчитывать
- За прошедший месяц
- За прошедший год
- В конце в этом списке нам нужно разместить статьи, которые были прокомментированы больше, чем год назад, и их также следует заказать по количеству комментариев.
Заранее спасибо.
Я думаю, что ваше лучшее решение - обернуть каждый запрос в 'if()' statement. Если количество записей равно 0, выполните следующий запрос. –
, но интервалы фильтров хранятся в другой таблице, поэтому администратор может увеличить количество интервалов. Например. он может создать еще один фильтр «на прошлой неделе». Поэтому в этом случае нам нужно каждый раз изменять запрос, когда фильтры меняют –
, если он может создать новый фильтр, а затем просто запрограммировать запрос, содержащий все возможные диапазоны дат. –