2017-07-16 11 views
0

データベース構造を作成するためのGUIとしてphpMyAdminを使用しています。私は1500行のコースのテーブルを持っています。コーステーブルをループし、コーステーブルの各行に基づいて1500個のテーブルを作成します。ここで、新しいテーブルの名前はコーステーブルのcourse_id列と等しくなります。これはこれまでの私の試みですが、私は行と変数の使用に問題があることを知っています。私が必要とする結果を解決するためのアドバイスは非常に高く評価されます。別のテーブルをループして新しいテーブルを作成する

DELIMITER $ 

CREATE PROCEDURE myTable() 

BEGIN 

DECLARE n INT DEFAULT 0; 
DECLARE i INT DEFAULT 0; 
    DECLARE tableCalled varchar(50); 
    SELECT COUNT(*) FROM courses INTO n; 
    SET i=0; 

WHILE i<n DO 
    SELECT course_id Row i FROM courses INTO tableCalled; 

    CREATE TABLE tableCalled ('id' UNSIGNED NOT NULL AUTO_INCREMENT,'unit' varchar(20), 
    'description' varchar(100),'other' varchar(100), 
     PRIMARY KEY (`id`)) 
     ENGINE = InnoDB; 

    SET i = i + 1; 
END WHILE; 

END 
$ 

CALL myTable(); 

答えて

1

クエリを使用して、テーブルを作成するためのスクリプトを作成できます。私は、course_idが有効なテーブル名である文字列であると仮定しています。

SELECT DISTINCT 
    CONCAT('CREATE TABLE `', courses.course_id, 
     '` (''id'' UNSIGNED NOT NULL AUTO_INCREMENT,''unit'' varchar(20), 
     ''description'' varchar(100),''other'' varchar(100), 
     PRIMARY KEY (`id`)) 
     ENGINE = InnoDB;') AS statements 
FROM courses; 

次のような結果が得られるはずです。コピー/貼り付けして実行してテーブルを作成できます。

CREATE TABLE `math101` ('id' UNSIGNED NOT NULL AUTO_INCREMENT,'unit' varchar(20), 
    'description' varchar(100),'other' varchar(100), 
    PRIMARY KEY (`id`)) 
    ENGINE = InnoDB; 
CREATE TABLE `science102` ('id' UNSIGNED NOT NULL AUTO_INCREMENT,'unit' varchar(20), 
    'description' varchar(100),'other' varchar(100), 
    PRIMARY KEY (`id`)) 
    ENGINE = InnoDB; 
... 
関連する問題