Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数据从旧MySQL模式迁移到新模式_Php_Mysql_Database Migration - Fatal编程技术网

Php 将数据从旧MySQL模式迁移到新模式

Php 将数据从旧MySQL模式迁移到新模式,php,mysql,database-migration,Php,Mysql,Database Migration,我试图找出将数据从旧数据库模式迁移到新模式的最佳方法。基本上,我正在处理软件替换(因此是新的数据库结构),现在我需要将数据从旧数据库迁移到新数据库。不幸的是,这并不像基于旧模式中的select运行简单的insert into查询那么容易 我可以在旧模式中找到的示例结构: **课程** | id | title | start_date | price | | 1 | Some course title 1 | 2019-10-09 | 100.00 | | 2

我试图找出将数据从旧数据库模式迁移到新模式的最佳方法。基本上,我正在处理软件替换(因此是新的数据库结构),现在我需要将数据从旧数据库迁移到新数据库。不幸的是,这并不像基于旧模式中的select运行简单的insert into查询那么容易

我可以在旧模式中找到的示例结构:

**课程**

| id | title               | start_date | price  |
| 1  | Some course title 1 | 2019-10-09 | 100.00 |
| 2  | Some course title 2 | 2019-10-09 | 100.00 |
| id | title_tid | start_date | price  |
| 1  | 1         | 2019-10-09 | 100.00 |
| 2  | 2         | 2019-10-09 | 100.00 |
当然,真正的表有更多的列,但这只是给出一个基本概念

在新模式中,该结构存在两个表,其中一个表保存课程标题的翻译值

我可以在新模式中找到的示例结构:

**课程**

| id | title               | start_date | price  |
| 1  | Some course title 1 | 2019-10-09 | 100.00 |
| 2  | Some course title 2 | 2019-10-09 | 100.00 |
| id | title_tid | start_date | price  |
| 1  | 1         | 2019-10-09 | 100.00 |
| 2  | 2         | 2019-10-09 | 100.00 |
**翻译**

| id | content_en          | content_nl |
| 1  | Some course title 1 | null       |
| 2  | Some course title 2 | null       |
在新模式中,这允许用户将其课程标题翻译为多种语言,等等。新模式中的许多其他来源也使用翻译表

我的问题的基础是,我必须,或者至少我认为我必须,在旧模式的Courses表的记录中循环,并且对于每个记录,首先在新模式中创建一个Translations记录。根据该翻译,我需要将ID放入新课程表的title_tid中

现在,最好的方法是什么?我可以纯粹用SQL来实现这一点,还是需要编写脚本来迁移这些数据?比如用PHP或者类似的语言?这当然对性能不是很好

编辑:
是的,我知道这个翻译设置在设计上非常糟糕,我不知道这些家伙为什么要用这个。。。但是,这不是重点:P

您可以用sql或任何其他编程语言来实现这一点。在迁移的情况下,性能并不是特别重要——这是一个一次性的练习。您知道如何在SQL本身中实现这一点吗?我真的可以用PHP做得很好,但我在SQL方面的技能还不够。然后用PHP做,因为如果你不能用SQL做这件事,那么你在执行其他转换时也会遇到问题。在整个迁移过程中最好使用相同的技术。技术上当然正确,但我也希望在这个过程中学到一些新的东西:)就像我说的,我可以用PHP做得很好,但这不一定是最好的方法。特别是考虑到我正在使用的真实数据库包含100个表和数百万条记录。每次我想测试它的时候,坐在那里等上几个小时是不可能的,因为PHP在这方面的循环速度太慢了:)有这么大的数据库,转换将花费很多时间,而且可能会出错几次。请不要期望在几个小时内完成这项工作。这里的准确性比额外的几个小时甚至几天要重要得多。这里的任务确实需要基本SQL(将标题复制到新标题表中,然后使用标题和课程表之间的联接将课程复制到新课程表中以获取标题id)。