0
以下のようなMysqlテーブルがあります。クロス集計クエリのフィルタリング
私はFIELD_1 =冬を持つユーザーのためのクロス集計/ピボット形式ですべてのユーザーデータを取得するためにテーブルの上にクエリを実行します。
私は任意のフィルタなしでクロス集計クエリを作成する方法を知っている:私はのためにFIELD_1 =「夏USER_2をフィルタリングしたいのに対し、
SELECT `user_id`,
GROUP_CONCAT(CASE WHEN `field_id` = 'field_2' THEN `field_value` ELSE NULL END) AS field_2,
GROUP_CONCAT(CASE WHEN `field_id` = 'field_3' THEN `field_value` ELSE NULL END) AS field_3
FROM `my_table`
GROUP BY `user_id`
しかし、すべてのユーザーが上記のクエリの結果'
上記の結果セットでPHP forループを実行することはできますが、PHP forループを使用せずにMySqlクエリを使用するより効率的な方法があるのだろうかと思いました。
私はfield_idとデータの何千もの行の約10の異なる値を持っているので、効率が大きな懸念事項です。
パーフェクト、おかげでたくさんの(4分で答えを受け入れます、それは私を許可するとき)。サイドクエリは、行の数が何千にもなると、これがPHP forループ(このような配列を構築する)と比較してより高速になると思いますか? – abdfahim
私は「はい」と言います。集約操作は、DBレベルで高速にする必要があります。このデータがリアルタイムでない場合は、バッチで処理し、集約結果を事前に準備し、直接フェッチして表示することができます。 – GurV