2012-11-26 105 views
0

我有一個名爲Event的模型類和一個字段'when'。我試圖在desc時返回事件順序,所以這裏是代碼。Rails活動記錄訂單問題

@events = Event.order("'when' DESC") 

我使用MySQL作爲數據庫。但返回結果未排序

我看着到控制檯和文件生成的SQL,它似乎確定

SELECT `events`.* FROM `events` ORDER BY 'when' DESC 

,我也運行這個SQL控制檯,它返回排序結果。 'when'有什麼特別之處?

,如果我改變了我的查詢Event.order("events.when DESC"),然後返回一個排序結果

回答

2

應該反引號,不是單引號。

@events = Event.order("`when` DESC") 
當您使用 single quote

周圍when它不是列了,但僅僅是一個字符串值。當轉義 tableName和columnName時,您應該使用反向代替而不是單個。

+1

我甚至不確定你是否真的需要引用/反引號'when',只是'Event.order('當DESC')'應該做的伎倆。至少,它適用於我 – MrYoshiji

+0

@KuyaJohn它不是可選的,它不是可選的,如果沒有反引號,我得到一個SQL語法錯誤。 – fengd

+1

@MrYoshiji backtick,*我認爲*,因爲'WHEN'出現在[** MySQL保留字**]列表中(http://dev.mysql.com/doc/refman/5.5/en /reserved-words.html) –

0

您可以刪除要添加到該字段中的單引號。

@events = Event.order("column_name DESC") 

這是真實的,一般爲COLUMN_NAMES,除非你的情況下when是保留字:應該周圍整個事情的報價,如工作。所以,你則需要BACKTICK它:

@events = Event.order("`when` DESC") 

不過,我仍然建議你改變你的列名,你最終會碰到使用保留字併發症。在我看來,when也不是非常具有描述性:事件是創建/訂購的嗎?活動什麼時候開始?事件何時結束?也許occurring_atdate_occurring列名會更詳細。

+0

不,它導致語法錯誤 – fengd

+0

'WHEN'出現在[** MySQL保留字**]列表中(http://dev.mysql.com/doc/refman/5.5/en/ reserved-words.html) –

+0

啊!很高興知道。在這種情況下,@ Jun1st最好重新命名你的列。我會相應地編輯我的答案^^ – joofsh