當我們必須從第6個索引開始獲取6個元素時,我不明白做Model.limit(6).offset(5)
的原因。我認爲它應該是Model.offset(5).limit(6)
,因爲我們首先必須告訴從哪個索引開始檢索元素,然後將搜索限制爲作爲參數傳遞的元素數目以限制,而不是相反。Model.offset()。limit()和Model.limit()之間的區別offset()
0
A
回答
0
這兩者是等價的。當您評估並從中獲取結果時,SQL將由ActiveRecord生成。使用.to_sql
看到,被生成的SQL:
[1] pry(main)> User.offset(6).limit(5).to_sql
=> "SELECT `users`.* FROM `users` LIMIT 5 OFFSET 6"
[2] pry(main)> User.limit(5).offset(6).to_sql
=> "SELECT `users`.* FROM `users` LIMIT 5 OFFSET 6"
0
在你的問題中提到這兩種情況下生成的SQL查詢是相同的,因此它們產生相同的結果。所以基本上,在同一個模型中使用偏移和限制的順序沒有區別。
>> Model.offset(5).limit(6).pluck(:id)
# SELECT `model`.`id` FROM `model` LIMIT 6 OFFSET 5
# [6, 7, 8, 9, 10, 11]
>> Model.limit(6).offset(5).pluck(:id)
# SELECT `model`.`id` FROM `model` LIMIT 6 OFFSET 5
# [6, 7, 8, 9, 10, 11]
3
事情是你錯誤地認爲鏈式鋼軌方法的順序很重要。事實上,事實並非如此。除非實際執行方法被調用,所有這些方法只是改變正在準備內部查詢:
> User.limit(6).class
#⇒ User::FriendlyIdActiveRecordRelation
> User.offset(5).class
#⇒ User::FriendlyIdActiveRecordRelation
儘管如此,爲了以防無所謂,除非一個調用執行方法,像each
(直接或通過如to_a
,map
等)或pluck
的方法。
> User.limit(6).offset(5).to_sql
#⇒ "SELECT `users`.* FROM `users` LIMIT 6 OFFSET 5"
> User.offset(5).limit(6).to_sql
#⇒ "SELECT `users`.* FROM `users` LIMIT 6 OFFSET 5"
相關問題
- 1. get_Offset和Offset之間的區別?
- 2. javascript:scrollTop和offset之間的區別頂部
- 3. Doctrine2 OFFSET和LIMIT
- 4. PDO LIMIT和OFFSET
- 5. SQL服務器OFFSET和LIMIT
- 6. `:limit`和`limit:`有什麼區別?
- 7. Sqlite LIMIT/OFFSET查詢
- 8. 之間的〜/和的區別../
- 9. '#','%'和'$'之間的區別
- 10. {!!之間的區別!!}和{{}}
- 11. '+ ='和'= +'之間的區別?
- 12. 「。+」和「。+?」之間的區別
- 13. .eq之間的區別。和==
- 14. #。/和#之間的區別。 ./
- 15. !=和!之間的區別==
- 16. 「%〜dp0」和「。\」之間的區別?
- 17. | =和^ = css之間的區別
- 18. 之間的區別。和#
- 19. ==和case之間的區別?
- 20. 「**/* /」和「** /」之間的區別?
- 21. jQuery - '。'之間的區別和「#」
- 22. 「?1」和「?」之間的區別
- 23. `%in%`和`==`之間的區別
- 24. fmod和%之間的區別
- 25. 之間的區別:+和:+
- 26. Oracle 11G中的LIMIT/OFFSET
- 27. 類區域和堆之間的區別
- 28. SPFile和PublishingPage類別之間的區別
- 29. 子類和類別之間的區別?
- 30. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
'all'不會觸發查詢。 '每個'都有。 –
該死的,的確,爲什麼地球上的「全部」不?在關係中調用'all'而不觸發查詢的原因是什麼? Rails吸吮。 – mudasobwa
現在,這是一種獲取「空」查詢以供以後定製的方法。 'products = Product.all; products = products.where(query1)if cond1; products = products.where(query2)if cond2'等等。事實上,關於關係中的「.all」應該是什麼意思?它是「讓我符合這個標準的所有項目」或「忽略所有以前的標準並獲得所有記錄」? –