使用sql/php将数据迁移到多对多
我正在尝试将结构不太好的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中匹配数组,但没有任何结果使用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”的作者
任何帮助都将不胜感激。非常简单:
- 外部循环从现有表中选择所有项目行
- 对于每个author列,在authors表中插入一行
- 每次插入后,使用
获取插入行的id,并将关系插入到article/author表中mysql\u insert\u id()
$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)");
}
}
}