gpt4 book ai didi

php - 将大型 xml 文件写入 mysql 表太慢,可能是由于 foreach 循环?

转载 作者:行者123 更新时间:2023-11-29 08:48:13 24 4
gpt4 key购买 nike

希望在这里得到一些帮助。我有一个大的 xml 文件(在上面的代码中称为 xml-file.xml)。我对上面的代码遇到的问题是将所有内容写入数据库的速度非常慢。我认为它慢的原因是因为循环播放电影并仅将电影名称以逗号分隔的字符串写入表中的部分。我的问题 - 有没有更有效的方法将电影名称转换为逗号分隔的字符串,然后写入表?预先感谢您的帮助!

XML 标记:

    <users>
<user>
<id>7280462</id>
<name>John</name>
<movies>
<name>
<![CDATA[Jack]]>
</name>
<description>
<![CDATA[comedy]]>
</description>
<name>
<![CDATA[Superman]]>
</name>
<description>
<![CDATA[action]]>
</description>
<name>
<![CDATA[Ace Venture]]>
</name>
<description>
<![CDATA[comedy]]>
</description>
<name>
<![CDATA[Major League]]>
</name>
<description>
<![CDATA[sports]]>
</description>
</movies>
</user>
</users>

我的 PHP 代码:

    $file = 'xml-file.xml';
$users = simplexml_load_file($file);

$num_rows = count($users);
for ($j=0; $j < $num_rows; $j++) {
$userid = $users->user[$j]->id;
$name = $users->user[$j]->name;

//update table with userid and name
$db->exec("INSERT INTO table (userid, name) VALUES ('$userid', '$name')");

//loop through movies and write only movie name to table as comma separated string
foreach ($users->user$j]->movies as $element) {
foreach($element as $key => $val) {
if ($key != 'description') {
//echo "{$key}: {$val}";
$title = trim($val).',';
$db->exec("UPDATE table set movies = concat(movies,'','$title') where userid = '$userid'");
}
}
}

}

最佳答案

这个怎么样:

for ($j=0; $j < $num_rows; $j++) { 
$userid = $users->user[$j]->id;
$name = $users->user[$j]->name;
$titles = "";

foreach ($users->user$j]->movies as $element) {
foreach($element as $key => $val) {
if ($key != 'description') {
$titles .= trim($val).',';
}
}
}

$titles = trim($titles, ",");

$db->exec("INSERT INTO table (userid, name, movies) VALUES ('$userid', '$name','$titles')");

}

它一次性生成所有 SQL,因此您只需要一条语句。

关于php - 将大型 xml 文件写入 mysql 表太慢,可能是由于 foreach 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12009133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com