从更多相同的表创建一个大表

时间:2017-02-13 13:47:16

标签: mysql database mysql5

很久以前我为每个用户创建了包含数据库和表的应用程序,每个表只有1行。所以我有像user1,user2,...,user2800这样的表。现在我知道这是一个糟糕的主意,所以我想为每个用户创建一个大表。我需要创建表

CREATE TABLE `users` (`user_id`, `col1`, `col2`, ...)

来自以下表格:

TABLE `user###` (`row_id`, `col1`, `col2`, ...)

其中###是用户的ID。

有什么好办法吗?

2 个答案:

答案 0 :(得分:1)

请勿尝试在sql中执行此操作,只需使用您喜欢的语言编写脚本即可。在伪代码中:

$tables = get_tables();  // write funciton that uses "show tables from books;"
foreach $tables as $table {
    $userid = getIdFromTableName($table); // simple regexp
    $data = getRowFromTable($table); // get data from old table
    insertIntoUser($userid, $data); // inserts your userid and the data in the new table
}

它过于宽泛,无法确定您最喜欢的语言是什么,以及创建脚本的具体内容,但这是您应该做的。

答案 1 :(得分:1)

由于所有用户表都具有相同的字段,因此您只需创建唯一表,然后循环遍历所有用户表以检索其内容。

例如使用PHP,它可能是这样的:

$sql = CREATE TABLE `users` (`user_id`, `col1`, `col2`, `col3`);
$mysqli_query($link, $sql);

$nbContacts = 2800;
for($i = 1;$i <= $nbContacts; $i++)
{
    $sql = 'INSERT INTO users(`user_id`, `col1`, `col2`, `col3`) SELECT `'.$i.'`, `col1`, `col2`, `col3` FROM `user'.$i.'`';
    $mysqli_query($link, $sql);
}