【发布时间】:2018-04-04 01:49:15
【问题描述】:
我有一个 PHP 项目的特殊情况,我正在使用没有第 3 范式结构的数据库。该数据库仅包含 1 个包含大量列的表。一些应该在单独的表中的数据,被夹在 1 列中,用某个符号分隔(在这种情况下,分号“;”)。
还有其他列,其中钳制数据应移动到上述相同的分隔表中。这一定令人困惑,所以让我详细说明:
**HugeTable**
id | Column1 | Column2 | Column3
123 |数据1;数据2 数据3;数据4 数据5;数据6
我需要将上面的数据放在一个单独的表格中,如下所示:
**NewTable**
id | idHugeTable | Column1 | Column2 | Column3
1 | 123 | Data1 | Data3 | Data5
2 | 123 | Data2 | Data4 | Data6
所以对于大表中的每个钳位数据,我需要在新表中创建一个新行。这个过程将帮助我规范化数据库,使其至少是可行的。现在是一场噩梦。这需要通过 PHP 或 MySQL 来完成,最好是 PHP,因为循环更容易通过脚本语言在每个循环中进行一次性查询。
编辑:我在 PHP 中尝试过的示例代码:
$delimiter = ";";
$query = "SELECT * FROM HugeTable";
$result = mysqli_query($connection_var, $query);
while ($row = mysqli_fetch_assoc()){
$column1_data = explode($delimiter, $row['Column1']);
$column2_data = explode($delimiter, $row['Column2']);
$column3_data = explode($delimiter, $row['Column3']);
foreach ($column1_data as $key => $value){
//skip if empty value
if ($value == ""){
continue;
}
else{
$query_ins = "INSERT INTO NewTable (idHugeTable, Column1, Column2, Column3) VALUES (".$row['id'].", ".$column1_data[$key].", ".$column2_data[$key].", ".$column3_data[$key].");";
mysqli_query($connection_var, $query_ins);
}//end if
}//end foreach
}//end while
mysqli_close($connection_var);
【问题讨论】:
-
发布您尝试过的内容。
-
id的1,2和idHugtable 123, 123从哪里来?示例数据不清楚。. Column1、Column2、Column3 也看起来是规范化的候选对象
-
Column1、2、3分离后会处于3NF。只有这样它们才不会传递地依赖于行键。由于项目隐私,我不能透露它们背后的信息,所以我理解这很令人困惑,因为它实际上可能意味着任何类型的数据。