2011-04-30 7 views
4
@events = Event.all(:order => "date DESC") 

для заказа моих событий по дате, a datetime столбец.Рельсы - заказ по часам

Можно ли заказать их не по дате, а только по часам? (Я подаю в суд на базу данных sqlite3)

Спасибо!

+0

который вы используете? MySQL? –

+0

Я сужу базу данных sqlite3 – Abramodj

ответ

6

Для SQLite

@events = Event.all(:order => "time(date) DESC") 

Используйте это с осторожностью, поскольку она игнорирует дату. (И увидеть "Моменты позже" ниже.)

CREATE TABLE test (date datetime primary key); 
INSERT INTO "test" VALUES('2011-01-01 08:00:00'); 
INSERT INTO "test" VALUES('2011-01-01 08:13:00'); 
INSERT INTO "test" VALUES('2011-01-01 09:23:00'); 
INSERT INTO "test" VALUES('2011-01-02 09:15:00'); 

Только одна из дат на 2 января

sqlite> select * from test order by time(date) desc; 
2011-01-01 09:23:00 
2011-01-02 09:15:00 
2011-01-01 08:13:00 
2011-01-01 08:00:00 

Несколько мгновений спустя. , ,

Я понял, что вы хотите сортировать по часам, а не по времени. Это сомнительное требование принимает другое выражение и сортируется по-разному.

@events = Event.all(:order => "strftime('%H', date) DESC") 

sqlite> select date from test order by strftime('%H', date) desc; 
2011-01-01 09:23:00 
2011-01-02 09:15:00 
2011-01-01 08:00:00 
2011-01-01 08:13:00 

Последние два ряда сортируются правильно по часам, неправильно по времени.

Еще позже. , ,

OP развертывает на Heroku, который не поддерживает SQLite. Для сортировки по часам по убыванию, ОП, вероятно, нужно что-то вроде

@events = Event.all(:order => "extract (hour from date) DESC") 

И прекратить использование одной платформы для разработки и другую платформу для развертывания.

+0

Привет, Catcall, большое спасибо за ваш ответ. К сожалению, ваше предложение хорошо использует локальный сервер, но не работает на Heroku, который утверждает, что имеет синтаксическую ошибку. – Abramodj

+4

Если вы развертываете на Heroku, вам не следует разрабатывать SQLite. Установите PostgreSQL и используйте это как свою платформу разработки. –

+3

Хотелось бы, чтобы я мог дать вам больше одного взлома за «прекращение использования одной платформы для разработки и другую платформу для развертывания», для этого должен быть макрос Markdown. Я думаю, что Heroku должен проверить ваш 'database.yml' и кричать на вас, если ваш адаптер разработки - это что-то другое, кроме PostgreSQL. –

1

Поскольку Heroku использует PostgreSQL, вы можете использовать:

@events = Event.all(:order => "date_part(hour, date) DESC") 

Вы будете иметь проблемы развивающихся если вы используете SQLite3 локально и PostgreSQL для развертывания - SQL не согласуется между платформами.

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