フィールドに関する集計情報を取得する最も持続可能な方法は何ですか?


12

EntityFieldQueryは、SQLに依存しないため、フィールドデータで集計関数(SUM、AVGなど)を実行するために使用することを意図していません。そうは言っても、そのような操作は時々合法的に実行される必要があります。EntityFieldQuery使用したSQL関数、特にEntityFieldQueryと、集計関数SUM、ARG、およびMAXの使用方法によると、SQLクエリを使用する必要があり、そのアプローチは私のユースケースに最適です。昨日@chxと話していましたが、フィールド名と列名を見つけるためにいくつかの内部関数を使用することを勧めました。これが持続可能かどうか、そして他の人にリリースするかもしれないコードベースで行うのが適切かどうか疑問に思っています。

それが最善の方法であれば、それが最善の方法です。面倒くさいので絶対に確信するまではやりたくありません。


今のところ、現在のニーズに合った内部関数(_field_sql_storage_tablename($field)および_field_sql_storage_columnname($field_name, $column)を使用しましたが、それは持続可能ではないので、この質問への答えに興味があります。
wizonesolutions

回答:


2

[フィールド表示]モジュールを使用すると、フィールドテーブルをベーステーブルとしてビューに公開できます。これは、ベーステーブルがフィールドテーブルであり、フィールドデータの読み込み元のエンティティではないという点で、ビューのデフォルトの動作とは異なります。たとえば、ノードをベーステーブルとして選択する場合、フィールドを追加できますが、クエリのプライマリ(ベーステーブル)はノードであり、データに応じて集約関数(別名多対1の関係)ノードへのフィールド)。

Viewsフィールドを使用すると、フィールドテーブルに直接アクセスできます。つまり、集計関数が適切に機能します。さらに、他のフィールドテーブルへの「興味深い」結合を行う必要がある場合は、以下を使用してそれらを完全に制御できます。

/**
 * Implements hook_views_data_alter().
 */
function mymodule_views_data_alter(&$data) {
  views_field_add_multi_join($data, /* see docs */);
}

これは非常に簡単に使用でき、複数のフィールドテーブルで一度に集計関数を実行できます。その後、手動でビュー$view->execute()を呼び出して、ビューから結果を取得できます。ビューのドキュメントにこの例があります。

EntityFieldQueryに対するこのアプローチの利点は、Views(ほとんどの人が既に使用している)でプロセスを管理でき、物理クエリの作成をそれほど直接的ではない方法で実行できることです。さらに、多くの場合、このような集計データを管理画面に表示し、ビューを使用して、追加の目的でコードの表示と結果へのアクセスの両方を行うことができます。


これを確認する必要があります。手動でクエリを実行する代わりに、そのコードを計算フィールドにスワップできます。私はおそらくこれをすぐに必要とするサイトで作業しており、ある時点で報告します。それが機能する場合、私は受け入れます。
wizonesolutions

0

これは、ビューへのアドオンモジュールで実行できますか?クエリを非常によく処理し、コンテキストフィルターが失敗したときのアクションなど、すべての値にデフォルト設定し、それぞれで使用可能な結果の数をカウントできる集計関数を使用して結果を公開します。クエリの関数はそこにあるはずですが、UIフォームが必要になります。これが理にかなっているかどうか教えてください。私は見解を分析し始めたばかりで、推測しています。


COUNT個のクエリをエンティティに対して実行できるため、解決されました。私はSUMにもっと興味があります。views_calcは洞察を提供するかもしれませんが、私は計算フィールドで値を使用したいと思います...これはviews_get_view_result(または同様のもの)でうまくできます。ただし、そもそもビューを取得してそのクエリを生成するのがコツです。ハック的な方法が最善のようです。私がそれをリリースしなければ、私は黄金になるので、私はそれから始めると思います。もしそうなら、誰かがパッチを提出することを願っています。
wizonesolutions
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.