我通过网络服务获取xml数据
<ITEMS>
<item id="uilldmduw"/>
<item id="wl2323ldsaw"/>
</ITEMS>
我需要将此列表与我的数据库中的“items”表进行比较,并仅返回在其中一个xml节点中也存在id的行。
XML可以包含几百个节点,items表包含100k的行
什么是最好的方法
答案 0 :(得分:0)
解析XML(例如使用SimpleXML)并将所有ID收集到一个数组中。然后在数据库查询中使用该数组:
$query = sprintf('SELECT id, field, field2
FROM table
WHERE
id IN(%s)',
implode(',', $id_array));
(请注意,此代码假定$id_array
中的所有元素都保证是整数或正确的SQL转义。在使用此代码之前,您需要自己确保这一点,否则冒着SQL注入的风险)
答案 1 :(得分:0)
以下内容将为您提供xml文件中存在ID的所有行的列表。
<?php
$xml = '<ITEMS>
<item id="uilldmduw"/>
<item id="wl2323ldsaw"/>
</ITEMS>';
$xml = simplexml_load_string($xml);
// do an xpath query and get all item id's
$result = $xml->xpath( '//item[@id]' );
$idList = array();
foreach($result as $node) {
$idList[] = '"' . (string)$node[ 'id' ] . '"';
}
// all id's are now in a string sequence
$idList = implode( ',', $idList );
$results = array();
// select all rows which have an id in the sequence
$sql = 'SELECT * FROM `table` WHERE `id` IN (' . $idList . ')';
$run = mysql_query( $sql, $db_conn );
if($run && mysql_num_rows($run)) {
while(($fetch=mysql_fetch_assoc($run))!=false) {
$result[] = $fetch;//store the results the way you want.
}
}
//$results now contains the desired result
?>
希望这有帮助。