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

Posted

技术标签:

【中文标题】从更多相同的表创建一个大表【英文标题】:Create one big table from more same tables 【发布时间】:2017-07-01 12:42:38 【问题描述】:

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

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

来自以下表格:

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

### 是用户的 ID。

有什么好的方法吗?

【问题讨论】:

这些倍数的用户表没有相同的字段? @Veve 每个表都有相同的字段 你能用 php 之类的东西来完成这个任务吗? @Jorge,这正是 Marek 寻求帮助的原因...... 是的...我读了它并直接来到了 cmets 部分...抱歉我将删除我的评论。 【参考方案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);

【讨论】:

【参考方案2】:

不要尝试在 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

很难弄清楚你最喜欢的语言是什么,以及创建脚本的具体细节是什么,但这是你应该做的。

【讨论】:

以上是关于从更多相同的表创建一个大表的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以创建与 SQL Server 2005 中的视图具有相同布局的表?

从名称具有相同首字母的表中选择

创建一个包含大量列的大表?

在 SQL Server 2005 中从小表批量复制到大表

mysql 创建相同的表结构

如何通过mysql或python将数据插入到另一个具有相同id的表中