問題タブ [dynamic-queries]
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.
php - クラスのどのプロパティをUPDATE動的クエリに含める必要があるかを判断する方法は?
図 1: モデル クラスの例を次に示します。
図 2: クラスの使用例
figure2UPDATE
に基づいてクエリを実行すると、、、およびの値が間違ってゼロ/ヌルに上書きされます。したがって、特定のプロパティがfigure2の呼び出しから設定されていないことをクラス内から判断する方法が必要です。これにより、データベース内の特定のフィールドのみを更新するようにクエリを動的に変更できます。それとも私はこれに間違って近づいていますか?player1_id
player2_id
score
UPDATE
注: 単一のarray
プロパティを使用してすべてのフィールドを保持する (および を使用するisset
) ことができることはわかっていますが、これはモデルのポイントを壊しているように感じます。配列が厳密に型指定されている Java などの言語?)。また、更新を実行する前に、ORM が行うと考えていることを実行して、最初のSELECT
クエリを作成できることにも気付きました (しかし、それは非常に非効率的です!)。
javascript - AWQL (AdWords Query Language) Seeking Multiple Range Query (一種の)
わかりました、これはかなり「あなたが実際に何を求めているのか」という質問かもしれませんので、少し我慢してください。原則として、私は .NET と SQL の開発者です。私は AWQL を使用して、AdWords スクリプトを取得してカスタマイズされたレポートを作成しようとしています。短いバージョン、別の日付範囲から取得する必要があり、「コンパイラ」がそれをどのように処理するか、または可能かどうかを理解するのに問題があります。一言で言えば、2 か月分のデータを 1 つのレポートに別々にまとめる必要があります。現在、構文エラーを考えていますが、わかりません。オタク用語での最終目標は、「WHERE(IMPRESSIONS_FROM_THIS_MONTH > IMPRESSIONS_FROM_LAST_MONTH) AND (IMPRESSIONS_FROM_LAST_MONTH > MONTH_BEFORE_THAT) の効果です。理論的には、すべて同じ出力になります (ロガーであるか、Google ドキュメントに直接アクセスするかは気にしません。これをスプレッドシートに入力してリンクをメールで送信するコードはありますが、現在、データを取得するのに苦労しています。そして、苦労するということは、数日間失敗することを意味します笑。
(gName のような変数は完全なコードにあり、複合ロジックを試すまでは機能します) 最善の方法が一度にすべてをクエリすることなのか、それとも個別にクエリを実行して何らかの方法で結果を 1 つのレポートに結合することなのかはわかりません. AdWords のスクリプト作成は、私が慣れ親しんでいるよりもはるかに制限されているように思われます。また、そのルールのいくつかは十分に文書化または説明されていません。これに関連するリンクやコードチャンクはどこにありますか? 助けてくれてありがとう!
php - アプリ全体で増加するクエリのリストを使用して、関心の分離と適切な OOP を整理して実装する方法は?
増え続けるクエリのリスト (ほとんどすべての "SELECT" クエリ) をどこに配置し、アプリ全体でそれらに適切にアクセスする方法は?
現在、アプリ内のサービス全体にクエリが散りばめられているアプリをリファクタリングしようとしています。既に作成した他のクエリと同様の小規模および大規模なクエリがある場合、DRY の問題が発生し始めています。また、それらのクエリで同じフォーマットを何度も書き直している場所もあります。選択したデータベースを置き換えることについては心配していませんが、後でクエリを最適化することについて心配しています。すべてのクエリをより適切に整理せず、中央の場所に保管しておくことで、それがほぼ不可能になったのではないかと考えています。OOP と SoC の優れたプラクティスに従いたいと考えています。
現在アプリでクエリを実行している場所の例
たとえば、特定のイベントのすべてのスタッフの PDF (またはコンテンツ) を提供するサービスがあります。このサービスには、いくつかの入力 (「ソート」、「フィルター」、「ページネーション制限」など) を受け入れるメソッドがあり、10 個のテーブル結合を使用してクエリを実行します (クエリは、ほとんどの処理の前に管理可能な行数までかなりうまくスライスされます)。 JOIN はその上で動作します)、PDF に必要な方法で結果をフォーマットします。
これまでに計画したこと
オブジェクトに関してデータベースのニーズを完全に考えようとして苦労しています。すべてが完全にアドホックではなく、多くの JOIN と WHERE を含む幅広い SELECT を使用して、多くの柔軟なクエリを実行しますが、最善を尽くしています。
ドメイン オブジェクト
usersEntity
: (データベース内eventsEntity
の各マッチ テーブル) のようなクラスを作成し、、、、などのid
プロパティを設定します。データベース テーブルのフィールドと一致します。変更できるようにゲッター/セッターを作成する場合があります(日付などの形式を設定したり、検証を実行したりします)。データベース内の 1 つのテーブルを実際には表さないエンティティを作成することもありますが、アプリ全体で頻繁に再利用するデータの共通コレクションを表す場合があります。またはと呼ぶかもしれません。name
phone
usersCollection
usersEvents
Data Mapper : したがって、すべての CUD (作成、更新、削除、読み取りではなく、おそらくfindById
usersMapper
を除く) 操作を配置し、それらを、などと呼ばれるクラスに格納しましeventsMapper
た。マッパーは、1 つのタイプのドメイン オブジェクト (上記の #1 を参照) のみを受け入れ、永続性を処理します (および、findById($id)
またはのような非常に基本的な読み取り/選択の小さなセットfindByEvent($eventId)
)。
これにより、読み取り (SELECT クエリ) のリストが増え、それらをどこに置くべきか?
私が知っているオプションですが、不十分です。多分私はそれらを誤解しています。
このようなクエリがあるとしましょう
したがって、PHP コミュニティ全体のブログで目にするのは、次の 3 つの選択肢です。
- クエリ呼び出しをDoctrine2呼び出しのようなものに置き換えます。彼らの DQL は呼び出しを再利用可能にしていないようですか? そして、5 つのエンティティ (JOIN に基づく) のように、ユーザー、イベント、会場、会場の種類、友人のすべてのプロパティが満たされるように、物事が接続されているようです。必要のないフィールドがたくさんあります。上記のクエリでわかるように、それぞれから 1 つの列が必要でした。また、このようなクエリの後にエンティティを保存する予定はありません。
すべてのクエリ呼び出しを、次のようなメソッドを持つリポジトリクラスに置き換えます
$someUserRepo-> findNameAndEventNameAndEventDateAndVenueNameAndVenueTypeNameAndFriends()
。本当にクレイジーなメソッド名に加えて、ここで何を渡すか (条件: sort、limit、いくつかの where ?) や何を返すか (arrays? objects?) がわかりません。クエリビルダーを使用して、すべてのクエリ呼び出しをORM呼び出し (Laravel の Eloquent など)に置き換えます。SQL クエリを
please->ORM->build->this->for->me->where->andWhere->andWhere->I->dont->know->SQL
. ところで、私は ORM がアンチパターンであるとほぼ確信していますか?
これは、PHP コミュニティ全体で非常に複雑な問題であると思われます。または、ここで何が欠けていますか?
postgresql - PL/pgSQL でクエリを動的に実行する
Oracle と SQL Server で求めようとしている問題の解決策を (私は思うに) 見つけましたが、これを Postgres ソリューションに変換することはできないようです。Postgres 9.3.6 を使用しています。
アイデアは、プロファイリングの目的でテーブル コンテンツに関する「メタデータ」を生成できるようにすることです。これは、列ごとにクエリを実行して、たとえば...最小値/最大値/カウント値などを調べることによってのみ実行できます(AFAIK)。手順を自動化するには、DB によって生成されたクエリを実行することが望ましいです。
サンプルsalesdata
テーブルでは、次のスニペットを使用して、各列の選択クエリを生成し、min() 値を返すことができます。
利点は、列の数に関係なく、データベースがコードを生成することです。これらのクエリを保存する場所として、何らかの変数またはテーブル列のいずれかを考えていましたが、これらのクエリを実行するというアイデアは無数にあります。生成されたクエリを変数に格納し、ここでEXECUTE
採用されているアプローチである(or EXECUTE IMMEDIATE
) ステートメントを使用してそれらを実行することを考えました(右ペインを参照)。しかし、Postgres では関数の外側で変数を宣言することができず、私はスクラッチしてきました。これがどのように適合するかについての私の頭は、それが従うべき方向であるかどうかにかかわらず、おそらくもっと簡単なものがあるでしょう.
私は現在、この他の質問に触発されて、このようなことを試みていますが、私が正しい方向に向かっているかどうかはわかりません:
sql - 動的クエリで列の名前を変更できません
クエリ内の列の名前を変更することは、すべての SQL 管理者/開発者にとって非常に基本的で一般的なタスクです。しかし、今日、数百のテーブルのテーブル名を選択し、以前に選択した各テーブルの最新のエントリと一致させる必要があるという問題に直面しました。
結局、私はこのようなものが欲しかった:
event_id と date を取得するのは動的クエリで十分簡単でしたが、列tbl_nameを追加しようとすると失敗します。
手順は簡単です。
最終的に、クエリは次のようになります。
(私にとって)奇妙なことは、最後のクエリを実行すると期待どおりに動作するが、exec @sqlを使用すると、 Invalid column name 'event_????'というエラーで失敗することです。. 列の名前変更が行われない理由と、これを回避する方法があるかどうかを誰かに教えてもらえますか?
前もって感謝します。
注: 私は SQL Server 2012 を使用していますが、これには比較的慣れていません!
mysql - ストアド プロシージャで動的クエリを使用する場合、欠点 (注意すべき点) はありますか?
asp.netを使用してWebサイトを開発しています。
SQL を使用するインターフェイスのチェックボックスによって駆動されるいくつかのフィルター メカニズムに基づいて、テーブルをクエリする必要がある状況があります。そのため、フィルターにはいくつかの組み合わせがある場合があります。最後に、動的SQLクエリを使用することでこれを実現できることがわかりました。そこで、ストアド プロシージャを作成し、適切なクエリを生成した後、アプリからストアド プロシージャにクエリを渡しました。
私のサンプルストアドプロシージャは次のようになります
そこでいくつか質問があります
1) これは安全ですか? つまり、SQL インジェクションにつながるのでしょうか?
2) ストアド プロシージャは常に最適なクエリ プランにコンパイルされます。動的クエリは、クエリが正しく行われるたびに SP を再コンパイルしますか?
3) パフォーマンスの問題はありますか?
4) このアプローチを使用する際に注意する必要があるその他の事実はありますか?
5)何か問題がある場合、それらを最小限に抑えるためにどのような行動を取ることができますか?