2014-12-06 3 views
-1

Я почесал голову лучше всего, чтобы сделать это, я запускаю небольшой форум и хочу изменить порядок размещения сообщений.MYSQL Закажите первые результаты меньше, чем через 1 час, а затем остальное остальное desc

ID | Subject | lastpost 
____________________ 
1 | Test | 2014-06-2012 00:00:00 
2 | Test | 2014-06-2012 00:00:00 
3 | Test | 2014-06-2012 00:00:00 
4 | Test | 2014-06-2012 00:00:00 
5 | Test | 2014-06-2012 00:00:00 
6 | Test | 2014-06-2012 00:00:00 
7 | Test | 2014-06-2012 00:00:00 

В идеале я хотел бы, чтобы отобразить результаты, где lastpost < 60 минут ТОГДА дисплей остальные по алфавиту ид

Я попытался

SELECT * FROM `table` ORDER by `lastpost` > (time), `id` desc 

, но, кажется, рисования пустой.

Заранее спасибо.

ответ

2

Вы хотите:

SELECT * 
FROM table 
ORDER BY (`lastpost` > date_sub(now(), interval 60 minute)) DESC, 
     (CASE WHEN `lastpost` > date_sub(now(), interval 60 minute) THEN lastpost ELSE NULL END) DESC, 
     id; 

Первое условие ставит самые последние сообщения первым. Вторая сортирует их по дате публикации (по-видимому, самой последней первой). Остальные отсортированы по id по убыванию.

+0

Это сортирует таблицу по последней папке, но я хочу ее так, чтобы она отображала всю таблицу, а не только часы на один час. Итак, сортируйте первые 1-часовые сообщения в порядке последнего обновления, а затем остальную таблицу, опускающуюся по id. –

+0

У меня недостаточно очков для понижения. Я только что протестировал, но он возвращает синтаксическую ошибку. –

+0

«Где» должен был быть «порядок». –

0

Я предполагаю, что lastpost имеет тип столбца datetime, а не строку - если нет, вы должны изменить это. So

SELECT * FROM table WHERE lastpost > NOW() - INTERVAL 1 HOUR ORDER BY id DESC 

должен решить вашу проблему.

+0

Спасибо, но это не то, что я спросил, я спросил, как отобразить первую таблицу, отсортированную по сообщениям в течение одного часа, а затем остальную часть таблицы, отсортированную по id desc. –

Смежные вопросы