2017-07-16 66 views
0

我使用phpMyAdmin作爲GUI來創建我的數據庫結構。我有一排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; 
... 
相關問題