この背景については、http://drupal.org/node/1067802を参照してください。
以上のことを考えると、db_select()を使用したい場合、またはdb_queryのみに依存する必要がある状況が存在しますか?
この背景については、http://drupal.org/node/1067802を参照してください。
以上のことを考えると、db_select()を使用したい場合、またはdb_queryのみに依存する必要がある状況が存在しますか?
回答:
SelectQueryを使用する5つの理由があります
さまざまな数の条件、結合、フィールドなどを使用して動的クエリを構築しています。例については、field_read_fields()を参照してください。
いわゆるExtendersを使用します。エクステンダーの例は、PagerDefault(pager_query()を置き換える)およびTableSort(tablesort_sql()を置き換える)です。これらにより、SelectQueryに機能を追加できます。カスタムテーブルのデータを使用してページャーでソート可能なテーブルを作成する方法も参照してください。。例:node_page_default() 。
他のモジュールがクエリを変更できるようにします。その後、いわゆるタグを追加すると、SelectQueryはそのタグに対応するalterフックを自動的に呼び出します。私は、Privatemsgモジュールでこれに大きく依存しています(既にD6でカスタムクエリビルダーを使用してこれを行っています)。
node_accessシステムを使用して、ユーザーに表示を許可するノードのみを表示する場合/必要な場合。「node_access」タグを$ queryに追加するだけです。これはdb_rewrite_sql()を置き換えます。
SelectQueryには、サポートされているすべてのデータベースでコードを同じように機能させるのに役立ついくつかの機能があります。たとえば、SelectQuery :: orderRandom()があります。また、LIKE条件がある場合、-> condition( 'field'、$ value、 'LIKE')は、常に大文字と小文字を区別しない比較であることを確認します。D6では、ずっと遅いLOWER()を使用する必要がありました。しかし、知る限りでは、この2つ以上はありません。
これらの理由が特定のケースに当てはまらない場合は、db_query()を使用します。
SELECTクエリが単純なクエリ文字列である場合、この関数を使用します。呼び出し元または他のモジュールがクエリを変更する必要がある場合は、代わりにdb_select()を使用してください。
小さなパフォーマンスの向上よりも読みやすさ、保守性、およびデータベース間の互換性を優先するため、常にdb_selectを使用します。さらに、言及された問題で示された数値は、全体的なパフォーマンスの誤ったイメージを与えると思います。複数のミリ秒の範囲で実行されることが多い単一の列よりも多くの列を返すクエリでは、300マイクロ秒の違いがあります。1回だけのオーバーヘッド(クラスの読み込み)があり、完全な(ページ)リクエストの違いがはるかに少ないことは驚くことではありません。