ここでいくつかの支援を期待しています。大きな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'");
}
}
}
}