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)
在您明确订购它们之前,不会对select的结果进行排序.有没有具体的"第一"的记录,除非你添加一个ORDER BY条款告诉它通过标准应该考虑的记录是"第一".
特别是在Ruby中,.first方法(或find(:first))不会应用任何排序,因此结果将(基本上)是随机的.如果您每次都需要"第一"记录相同,则需要订购结果:
User.order(:id).first
Run Code Online (Sandbox Code Playgroud)
这是(有点奇怪)通过对比.last方法,该方法将施加order(:id)自动.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |