Active Recordは、find
メソッドではPOW
およびSQRT
、find_by_sql
では一般的なSQL関数を認識しません。これを回避するにはどうしたらいいですか? 。ActiveRecordのは、それが理にかなっている最も一般的なcalculation functionalitiesをサポートしていますアクティブレコードSQLクエリの数学関数ですか? (pow、sqrtなど)
答えて
:-(そこに何の文献はないように思わ は、他の先進的な使用方法については、必ず経由して、SELECT文の値をカスタマイズすることができます。選択オプション
find(:all, :select => "COUNT(*)")
個人的に、私はそれは意味が次のステートメントのいずれかのActiveRecordの(およびSQL)を使用することになるだろう例を見つけることができませんでした。
SELECT POW(9, 6)
531441
SELECT POW(2, -3)
0.125
SELECT SQRT(65536)
256
IMHO、Rubyの数学ライブラリは、それがpですより良い選択肢。
ActiveRecordで作成できないPOWまたはSQRTクエリの実際の使用例がありますか?
データベース内のデータを計算するクエリについては、これははるかに優れていますすべてのデータをローカルでフェッチするのではなく、データベース上で計算を行い、スクリプト言語を使って計算を行う... – Smar
私はActiveRecordがスカラー関数をまったく直接サポートしていないと思います。データベースに送信されたクエリーを簡潔にして最小限のレコードセットにするためには、グループ機能は確かに後ろからメインであるため、多くの意味があります。
スカラーは多くのメリットがありませんし、現時点では私が知っているAR構文はありません。モデル内で計算を実行することは、データベースサーバーの負荷を軽減するため(オンデマンドではほとんどない可能性が高いにもかかわらず)、実際のメリットがあります。
DBMSがPOW()を実装していない場合(ANSI優先の関数名ではないと思う)、ARの何を期待しているのでしょうか?何をする?
あなたのDBMSにあなたのスカラー関数を実行させたいと思うなら、あなたは言われている通り、find_by_sql
、指定された選択リストまたは何かのSQL文字列の一部としてそれらを供給しなければならないと思います。類似。しかし、私はあなたのモデルに関数を入れて行くだろう。
マイク、レコードと値を比較する際に、クエリの複雑さをモデルから抽象化する方法を教えてください?助言がありますか? – happythenewsad
- 1. 数学関数sqrt。何が欠けていますか
- 2. SQRTの差(x)とPOW(X、0.5)
- 3. C++のsqrt関数
- 4. CMakeはsqrt、pow、expなどのgcc組み込み関数を検出できません
- 5. POW関数とxcode
- 6. C++ - GMP pow()関数
- 7. C数学SQRTとgcc -lmオプション
- 8. pow関数の無限ループ
- 9. Sqlケースステートメント内の数学関数
- 10. AArch64でのsqrt関数のパフォーマンス
- 11. アクティブレコード - SQLクエリの変換
- 12. caffeの__global__関数でCUDAの数学関数を使用する
- 13. C++の数学関数の問題
- 14. 数学関数の数値引数ではない
- 15. 数学関数を別の数学関数に適用する
- 16. 読む数学関数の問題
- 17. Python 2.7のユーザ定義関数内の数学関数
- 18. Javaの数学クエリ
- 19. SQLクエリのキャスト関数
- 20. 関数内のSQLクエリ
- 21. 結果を改善するデバイスの数学関数(CUDA)
- 22. オブジェクトをSQLクエリ関数から別の関数に渡す
- 23. SQLクエリ - Accessのllf関数。
- 24. SQLのマルチテーブル数学
- 25. Intellij Scala数学関数のインポート
- 26. NumPy数学関数
- 27. floorfなどの数学関数の説明はどこにありますか?
- 28. CoreData数学関数
- 29. ループ数学関数
- 30. 入力する方法\ sqrt [3] {64} = 4の数学的なつぼみ
どのように使用しようとしているかの例を貼り付けることができます。彼らが仕事をすることを私は保証します。 –
ベンは言った、私は前にこれをやった。コード例を投稿してください。 –
ここに例があります Location.find_by_sql(select * from TABLENAMEここで10> sqrt(EXP((40.47-COLUMN1)、2)+ EXP((73.50-COLUMN2)))) – happythenewsad