MySQL では、動的に割り当てられた名前を持つテーブルを含むクエリを実行できます。この機能は、名前を別のソースから抽出するか、ユーザー入力から導き出す必要があるテーブルのセットを操作する場合に役立ちます。
動的テーブル選択が必要になる一般的なシナリオの 1 つは、次のような場合です。テーブル名は変数に格納されます。たとえば、次のコードについて考えてみましょう。
SET @ID_1 = (SELECT ID FROM `slider` LIMIT 0,1); SET @Cat = (SELECT Category FROM `slider` LIMIT 0,1); select * from @Cat where ID = @ID_1
このコードは、@Cat という名前のテーブルから行を選択しようとします。テーブル名には変数の値が割り当てられます。ただし、データベースが「@Cat」を有効なテーブル名として認識しないため、MySQL でこのクエリを実行するとエラーが発生します。
この問題を解決するには、SQL クエリの動的な実行を可能にするプリペアド ステートメントを使用する必要があります。基本的な考え方は、変数値に基づいてクエリ文字列を構築し、PREPARE ステートメントと EXECUTE ステートメントを使用してクエリを準備し、実行することです。
以下は、準備されたステートメントを使用して動的なテーブル選択を実現する改訂されたコードです。
SET @s = CONCAT('select * from ', @Cat, ' where ID = ', @ID_1); -- Construct the query string PREPARE stmt1 FROM @s; -- Prepare the statement EXECUTE stmt1; -- Execute the statement DEALLOCATE PREPARE stmt1; -- Deallocate the prepared statement
このスクリプトでは、CONCAT() 関数を使用して、変数 @Cat および @ID_1 の値に基づいてクエリ文字列を構築します。次に、PREPARE ステートメントを使用して準備済みステートメントが作成され、EXECUTE ステートメントでクエリが実行されます。最後に、DEALLOCATE PREPARE ステートメントを使用して、準備されたステートメントの割り当てが解除されます。
以上が動的に割り当てられたテーブル名を使用して MySQL クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。