問題タブ [find-by-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
72 参照

sql - あるテーブルから許可されたforeign_keysのセットを引き出し、それらを使用して別のテーブルをフィルタリングする単一のSQLクエリを定義することは可能ですか?

具体的には、Ruby-on-Railsのfind_by_sqlメソッドにフィードしたいことを実行するSQLを生成できるかどうかを調べようとしています。

結合テーブルFriendshipsによって他のユーザーに周期的に結合されているユーザーがいると想像してください。各ユーザーはコメントを作成することができます。

特定のユーザーの友達が作成した最新の100個のコメントをSQLクエリで返し、ユーザーが見やすい1つの場所にすべてを表示できるようにします。

基本的に、作成者の外部キーがユーザーの友達の主キーから派生したキーのセットに含まれているかどうかでコメントをフィルタリングしようとしているため、これは注意が必要です。

編集:設定を明確にします。スキーマ定義の書き方がよくわからないので、Railsで説明します。

0 投票する
1 に答える
776 参照

ruby-on-rails - Ruby on Rails: 関連するモデルを find_by_sql でインスタンス化しますか?

どうやら、Rails 検索クエリで include と select を同時に使用することはできず、これは wntfix として繰り返しマークされてい
ます
。 /5371

include を使用したいときと select を使用したいときがまったく同じなので、これは非常に不便だと思います。

これを回避し、find_by_sql またはその他の方法を使用して手動で include-with-select を生成する方法はありますか? 問題は、インクルードの機能をエミュレートする方法を知らないことです。インクルードされた関連モデルを保持するためにメモリ内でモデルをインスタンス化するため、model1.associated_models を入力して、データベースに再びヒットしないようにすることができます。

0 投票する
1 に答える
210 参照

ruby-on-rails - Ruby on Rails:循環結合テーブルのもう一方のレッグを含めることは可能ですか?

ユーザー間の友情をモデル化するアプリケーションに取り組んでいます。

2 人のユーザーがフレンドになると、フレンドシップ クラスのインスタンスが 2 つ (フレンドシップの方向ごとに 1 つずつ) 作成されます。これは、各方向に異なるアクセス許可を設定できるため、またルックアップを容易にするために必要です。そのため、2 番目のインデックスを作成して検索を 2 倍にする必要なく、常に user_id で検索します。

find または名前付きスコープのいずれかを使用して、カウンターフレンドシップとともに友人を引き上げることは可能ですか? ユーザーが友情の自分の足に保存されている友情のアクセス許可を編集できるようにするため、これを行いたいと思います。したがって、友人の情報をユーザーに表示するときは、反対の足を確認する必要があります権限の設定方法。(余談ですが、これは理にかなった方法のように思えますか?反対側に保存するか、表示する前に反対側を参照する必要があるか、どちらも不快です。)

私は仕事をするSQLのバッチを作ることができました:

この関数は、ユーザーのすべての友達の名前と ID、および権限を返します。ただし、これは実際には理想的ではないように思われます。つまり、friend.permissions を呼び出してアクセス許可にアクセスする必要があることを意味します。ここで、アクセス許可は実際には friend のメンバーではなく、find_by_sql によって属性としてマージされているだけです。全体として、named_scope または find 呼び出しを使用してこれを実行したいのですが、残念ながら、そのアプローチを使用しようとすると、Rails が同じ Friendship 結合テーブルを結合することでチョークするため、エラーが発生しました。クエリを 2 回。

0 投票する
3 に答える
7337 参照

ruby-on-rails - will_paginate と find_by_sql を組み合わせることは可能ですか?

私の Rails アプリケーションでは、will_paginategem を使用して SQL クエリのページネーションを行いたいと考えています。それは可能ですか?私はこのようなことを試みましたが、うまくいきませんでした:

そうでない場合、これを回避する方法をお勧めできますか?私は自分のページネーションを書く必要はありません。

0 投票する
1 に答える
212 参照

ruby-on-rails - find_by_sql によってオンザフライで生成されたフィールドをアクティブレコードに使用させる方法

次のような異なるフィールドの組み合わせとして、元のテーブルにない別のフィールドを生成する Activerecord で find_by_sql を使用しています。

次のように新しく生成されたフィールドにアクセスしようとすると:

私は何も得ません!この問題にどのように取り組むべきだとあなたは提案しますか

0 投票する
2 に答える
1260 参照

ruby-on-rails - Ruby の ActiveRecord カスタム SQL

以下のこれらの SQL を実行する必要がありますが、結果を取得できませんでした。

しかし、結果をnewidに取得できないようです。得られた値は [#<Header>] だけでした。Ruby の正しいステートメントを作成するのを手伝ってくれる人はいますか?

編集: テーブル フィールド

ありがとうございました。

0 投票する
2 に答える
752 参照

sql - sql left join where rails

Railsを使用しているため、Railsで使用することはめったにないため、SQLで錆びてきました。私は2つの関連するテーブルを持っています:コメント1:mcomment_views

comment_views.viewedがfalseであるすべてのコメントを検索したい。問題は、一部のコメントについて、comment_viewsに関連するレコードがまだないことです。

これまでのところ私は

ただし、前述のように、comment_viewsにレコードがない場合は、コメントは返されません。

0 投票する
1 に答える
2421 参照

ruby-on-rails - SQL文によるレールでの一時テーブルの使用

データベースのテーブルで重複したすべてのエントリを削除する方法を見つけようとしています。重複を削除する前に、この重複をさらに計算する必要があるため、それらを一時テーブルに配置する必要があります。

重複の取得はかなり複雑なSQLステートメントであり、active_recordの方法で実行したくありません...

このステートメントでこの一時テーブルを生成するにはどうすればよいですか? このタスクに ar-extentions を使用するのは理にかなっていますか?

0 投票する
1 に答える
187 参照

ruby-on-rails - ActiveRecord と関係、find_by_sql または named_scope から未使用のレコードを取得しますか?

いくつかのコンテキスト:

こんな感じのモデルもいます

アクター has_many Acts

行為はアクターに属し、決定に属します

決定 has_many Acts, belongs_to Prompt

プロンプト has_many 決定

私がする必要があるのは、ActorsController で、利用可能なすべてのプロンプトのうちまだ使用されていないランダムなプロンプトを取得することです。

私の Rails アプリでは、アクターにいくつかの選択肢を与えるプロンプトが表示されます。彼らが選択 (決定) を行うと、それはデータベースに Act として保存されます。

私はnamed_scopeとfind_by_sqlのさまざまな反復を試みましたが、どれもうまくいきませんでした。また、非常に多くのモデルが動作していて、私が知らないように見えるため、最初から私の考えが正しかったかどうかさえわかりません.どこから始めれば。

これが私が何に反対しているかのアイデアを与えることを願っています。攻撃の計画を立てるための一般的な指針さえいただければ幸いです。

ありがとう!

編集

これを数時間噛んだ後、何かが機能しましたが、非常に面倒で、ログがSQL呼び出しでいっぱいになっているため、批判的な目で見られることは間違いありません.

プロンプト モデルでは:

アクター モデルでは:

そして ActorsController で:

明らかに、used_prompts の if ブロックはここで 1 つの有罪の当事者ですが、self.acts.decisions.each などを実行できないため、これに対処するより良い方法はわかりません。たぶん誰かが私を教えてくれます:)

0 投票する
2 に答える
1824 参照

ruby-on-rails - ActiveRecord カスタム クエリと find_by_sql の読み込み

このようなカスタムクエリがあります

ここで、self はユーザーオブジェクトです

同じものに相当するSQLを生成することができました

見た目はこちら

SQL と ActiveRecordを十分に理解した上で、上記のクエリから得られた結果は、 find_by_sql(sql) one から得られた結果と比較して、(ほとんどが同意するだろう) 時間がかかる可能性があると想定しました。

しかし、驚くべきことに

上記の 2 つを実行すると、ロード時間に関して ActiveRecord カスタム クエリが ActiveRecord "find_by_sql" からリードしていることがわかりました。テスト結果は次のとおりです。

ActiveRecord カスタム クエリの読み込み時間

ウェブサイトの読み込み (0.9ms)

Web サイトの列 (1.0ms)

find_by_sql ロード時間

ウェブサイトの読み込み (1.3ms)

Web サイトの列 (1.0ms)

テストをもう一度繰り返しましたが、結果は同じでした(カスタムクエリが戦いに勝った)

違いはそれほど大きくないことはわかっていますが、通常のfind_by_sqlクエリがカスタムクエリよりも遅い理由を理解できません

誰でもこれについて光を共有できますか.

とにかくありがとう

よろしく ヴィレン・ネギ