ホームページ >データベース >mysql チュートリアル >準備されたステートメントを使用して動的 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;
このコードは、product_Additional テーブル内の固有の fieldname 値に基づいて動的クエリ文字列を生成します。次に、この文字列を使用して PREPARE ステートメントが作成され、実行されて割り当てが解除されます。
GROUP_CONCAT 関数には 1024 文字の文字制限があることに注意してください。 group_concat_max_len パラメータを設定することで、この制限を増やすことができます。
以上が準備されたステートメントを使用して動的 MySQL ピボット テーブル クエリを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。