MySQL での動的な列の選択
MySQL では、未知のテーブル構造または予想されるテーブル構造に基づいて特定の列を取得する必要があるシナリオが発生する場合があります。スキーマが変更されます。これは、SQL ステートメント内の列名をハードコーディングすることが非現実的である場合に問題を引き起こします。この記事では、すべての列を選択することなく、この問題の解決策を検討します。
情報スキーマの利用
information_schema データベースには、MySQL サーバー上のすべてのデータベースとテーブルに関するメタデータが含まれています。これには、列の名前、データ型、テーブルのメンバーシップなどの列に関する情報が保存される COLUMNS というテーブルが含まれています。
動的クエリの構築
列を動的に選択するには名前を使用するには、MySQL 関数と information_schema.COLUMNS テーブルを組み合わせて使用できます。以下に段階的なアプローチを示します。
SQL ステートメントの例
次の SQL ステートメントは、テーブルから「prefix」で始まる列名を動的に選択する方法を示しています。 "atable":
CREATE TABLE atable ( prefix1 VARCHAR(10), prefix2 VARCHAR(10), notprefix3 INT, notprefix4 INT ); INSERT INTO atable VALUES ('qwer qwer', 'qwerqwer', 1, 1); INSERT INTO atable VALUES ('qwer qwer', 'asdfaasd', 1, 1); INSERT INTO atable VALUES ('qwer qwer', 'qrt vbb', 1, 1); INSERT INTO atable VALUES ('qwer qwer', 'sdfg sdg', 1, 1); SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME), ' FROM atable;') INTO @query FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = 'atable' AND c.COLUMN_NAME LIKE 'prefix%' ORDER BY c.ORDINAL_POSITION; PREPARE stmt FROM @query; EXECUTE stmt;
出力:
このステートメントの出力は、次の SQL ステートメントを含む単一行になります:
SELECT prefix1, prefix2 FROM atable;
このステートメントを実行すると、「atable」から列「prefix1」と「prefix2」のみが取得されます。テーブル。
以上が情報スキーマを使用して MySQL で列を動的に選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。