1

我有一个名为 Event 的模型类和一个字段“when”。我试图在 desc 时返回事件顺序,所以这里是代码。

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

我使用 MySQL 作为数据库。但返回的结果没有排序

我查看了控制台,并将生成的 sql 归档,这似乎没问题

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

我也在控制台中运行这个 sql,它返回了排序结果。“何时”有什么特别之处吗?

如果我将查询更改为Event.order("events.when DESC"),则返回排序结果

4

2 回答 2

3

它应该是反引号,而不是单引号。

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

当您使用它时single quotewhen它不再是一列,而只是一个字符串值。转义tableName 和 columnName时,您应该使用反引号而不是单引号。

于 2012-11-26T14:17:20.727 回答
1

您可以删除要添加到该字段的单引号。它应该与整个事物的引号一起使用,例如:

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

这对于 column_names 通常是正确的,除非在您的情况下 wherewhen是保留字。所以你需要反引号:

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

但是,我仍然建议您更改您的列名,您最终会遇到使用保留字的复杂情况。when在我看来也不是很具有描述性,是:创建/订购事件的时间?活动什么时候开始?活动什么时候结束?也许一个occurring_atdate_occurring列名会更详细。

于 2012-11-26T14:20:28.807 回答