Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
使用sql/php将数据迁移到多对多_Php_Mysql - Fatal编程技术网

使用sql/php将数据迁移到多对多

使用sql/php将数据迁移到多对多,php,mysql,Php,Mysql,我正在尝试将结构不太好的mysql文章数据转换为更好的多对多结构 基本上,我在文章表上有字段'article_id,title,author_1,author_2,author_3,author_10',其中文章id是唯一的,并且作者字段包含全名 我需要的是一个manay-to-many关系,其中我最终得到一个“article\u-id,title”的文章表,一个包含“article\u-id,author\u-id”的中间表和一个包含“author\u-id,author\u-name”的作者

我正在尝试将结构不太好的mysql文章数据转换为更好的多对多结构

基本上,我在文章表上有字段'article_id,title,author_1,author_2,author_3,author_10',其中文章id是唯一的,并且作者字段包含全名

我需要的是一个manay-to-many关系,其中我最终得到一个“article\u-id,title”的文章表,一个包含“article\u-id,author\u-id”的中间表和一个包含“author\u-id,author\u-name”的作者表

我知道一定有办法用几行代码来实现这一点。我已经尝试了一整天,将数据拉出来,并尝试在php中匹配数组,但没有任何结果


任何帮助都将不胜感激。

非常简单:

  • 外部循环从现有表中选择所有项目行
  • 对于每个author列,在authors表中插入一行
  • 每次插入后,使用
    mysql\u insert\u id()
    获取插入行的id,并将关系插入到article/author表中
-

$sql=“从文章中选择文章id、标题、作者1、作者2、作者3、作者4、作者5、作者6、作者7、作者8、作者9、作者10”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u数组($result)){
对于($i=1;$i 0){
$author\u id=mysql\u结果($check,0);
}否则{
mysql_查询(“插入作者(作者名称)值(“$author”)”;
$author\u id=mysql\u insert\u id();
}
mysql_查询(“插入到article_author(article_id,author_id)值({$row['article_id']},$author_id)”);
}
}
}

我还会在那里添加一个签入,这样您就不会在艺术家表中复制艺术家。太棒了!它就像一个符咒!你决定了工作日的好结果和坏结果!
$sql = "SELECT article_id, title, author_1, author_2, author_3, author_4, author_5, author_6, author_7, author_8, author_9, author_10 FROM articles";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {

  for ($i = 1; $i <= 10; $i++) {

    if (!empty($row['author_' . $i])) {

      $author = mysql_real_escape_string($row['author_' . $i]);

      //check if author exists
      $check = mysql_query("SELECT author_id FROM authors WHERE author_name = '$author'");
      if (mysql_num_rows($check) > 0) {
        $author_id = mysql_result($check,0); 
      } else {
        mysql_query("INSERT INTO authors (author_name) VALUES ('$author')");
        $author_id = mysql_insert_id();
      }

      mysql_query("INSERT INTO article_author (article_id, author_id) VALUES ({$row['article_id']}, $author_id)");
    }
  }

}