ホームページ > データベース > mysql チュートリアル > 準備されたステートメントを使用して動的 MySQL ピボット テーブル クエリを作成する方法

準備されたステートメントを使用して動的 MySQL ピボット テーブル クエリを作成する方法

Linda Hamilton
リリース: 2024-12-20 13:53:09
オリジナル
870 人が閲覧しました

How to Create a Dynamic MySQL Pivot Table Query Using Prepared Statements?

動的データから派生した列を使用した動的 MySQL ピボット テーブル クエリ

ピボット テーブル クエリ

要件は、製品からデータをピボットし、 product_Additional テーブル。product_Additional テーブルの値に基づいて列が動的に設定されます。 IF() による条件付き集計を使用する現在のクエリは動的ではなく、新しいフィールドが追加されるたびに手動で変更する必要があります。

プリペアド ステートメントを使用した解決策

MySQL で動的ピボットを実現するには、次のようにします。プリペアドステートメントを使用できるため、実行時にクエリ文字列を構築できます。次のコードは、このアプローチを示しています。

-- Initialize @sql variable
SET @sql = NULL;

-- Dynamically create the query string by iterating over distinct `fieldname` values
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pa.fieldname = ''',
      fieldname,
      ''', pa.fieldvalue, NULL)) AS ',
      fieldname
    )
  ) INTO @sql
FROM product_additional;

-- Concatenate the constructed string with the base query
SET @sql = CONCAT('SELECT p.id
                    , p.name
                    , p.description, ', @sql, ' 
                   FROM product p
                   LEFT JOIN product_additional AS pa 
                    ON p.id = pa.id
                   GROUP BY p.id, p.name, p.description');

-- Prepare the query
PREPARE stmt FROM @sql;

-- Execute the prepared query
EXECUTE stmt;

-- Deallocate the prepared statement
DEALLOCATE PREPARE stmt;
ログイン後にコピー

Execution

このコードは、product_Additional テーブル内の固有の fieldname 値に基づいて動的クエリ文字列を生成します。次に、この文字列を使用して PREPARE ステートメントが作成され、実行されて割り当てが解除されます。

制限事項

GROUP_CONCAT 関数には 1024 文字の文字制限があることに注意してください。 group_concat_max_len パラメータを設定することで、この制限を増やすことができます。

以上が準備されたステートメントを使用して動的 MySQL ピボット テーブル クエリを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート