据this,ActiveRecord的first
生成SQL:为什么Rails的ActiveRecord最后一个方法由id命令而第一个不?
SELECT * FROM clients LIMIT 1
而ActiveRecord的last
生成SQL:
SELECT * FROM clients ORDER BY clients.id DESC LIMIT 1
上first
的行为是不正确的,按我的意见,而在last
它是。如果不指定顺序,简单的SELECT将以任意或不可预知的顺序返回。因此,first
不保证总是返回相同的记录(如果不是最小的记录)。
有没有人有线索,为什么Rails的ActiveRecord工作呢?
在此先感谢 Panayotis
对不起,我没有得到你。我相信'首先'总是以最小的ID返回记录。在哪种情况下,它的表现会有所不同? – Subodh
@sub_stantial你如何知道/相信'''SELECT * FROM clients LIMIT 1'''会返回最小ID的记录?它在某个地方有记录吗?根据[this](http://www.ehow.com/how_2094997_sort-mysql-query-using-order.html)顺序是任意的和非确定性的。同样在[this](http://dev.mysql.com/doc/refman/5.5/en/sorting-rows.html)中,第一个短语表示结果不以特定顺序返回,除非您应用顺序。请提供任何证明您的陈述的参考资料,我会接受。 –
我只想'先'返回查询返回的第一个结果(它应该是'[0]'的别名)。但是,它改变了我的'GROUP BY'查询以要求使用'.select'故意省略的'id'列(因为ID是唯一的,所以不会有任何分组!)。因此'.first'现在表现得“正确”,但“正确”行为实际上是非常糟糕的行为。 –