CONCAT() とサーバー側の準備済みステートメントを使用した MySQL クエリでの動的カラム名の作成
問題:
MySQL の CONCAT() 関数を利用して、固定文字列と別のクエリの結果を連結することでクエリ内に列名を動的に作成できますか?
望ましい結果:
たとえば、次の形式で列名を構築することが望ましいです:「列」に、別のクエリから生成された数値を連結します。
解決策:
当初、この操作は実行不可能であると想定されていました。しかし、さらなる調査により、MySQL のサーバー側のプリペアド ステートメントが解決策を提供することが判明しました。これらのステートメントを使用すると、動的文字列から任意の SQL ステートメントを作成および実行できます。
実装:
次の例は、この動的な列名の作成を実現する方法を示しています。
-- Construct the dynamic query string using CONCAT() SET @query := ( SELECT CONCAT( "SELECT", GROUP_CONCAT(CONCAT("\n 1 AS ", COLUMN_NAME) SEPARATOR ','), "\nFROM DUAL" ) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'COLUMNS' ); -- Prepare the statement using the constructed query PREPARE s1 FROM @query; -- Execute the prepared statement EXECUTE s1; -- Deallocate the prepared statement DEALLOCATE PREPARE s1;
このアプローチでは、指定された基準に基づいて必要な列名が動的に生成され、それに応じてクエリが実行されます。
以上がCONCAT() とサーバー側のプリペアド ステートメントを使用して MySQL クエリで列名を動的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。