简单的Rails/MySQL Query会产生奇怪的结果

SG *_* 86 0 ruby mysql ruby-on-rails

1.8.7 :011 > User.find(:first).id
  User Load (0.4ms)  SELECT `users`.* FROM `users` LIMIT 1
 => 1 

1.8.7 :012 > User.find(:first, :select => 'id')
  User Load (0.3ms)  SELECT id FROM `users` LIMIT 1
 => #<User id: 2> 
Run Code Online (Sandbox Code Playgroud)

从我身边......我总是很困惑.它应该在两个查询中给我用户ID 1吗?我所知道的是,数据库中的第一个用户的ID为1,我知道这个"问题/奇怪的结果"与MySQL有关.

SELECT * FROM `users` LIMIT 1;
= 1

SELECT id FROM `users` LIMIT 1;
= 2

SELECT id FROM `users` ORDER BY id ASC LIMIT 1;
= 1
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 5

在您明确订购它们之前,不会对select的结果进行排序.有没有具体的"第一"的记录,除非你添加一个ORDER BY条款告诉它通过标准应该考虑的记录是"第一".

特别是在Ruby中,.first方法(或find(:first))不会应用任何排序,因此结果将(基本上)是随机的.如果您每次都需要"第一"记录相同,则需要订购结果:

User.order(:id).first
Run Code Online (Sandbox Code Playgroud)

这是(有点奇怪)通过对比.last方法,该方法施加order(:id)自动.