Webサービスを介してxmlデータを取得しています
<ITEMS>
<item id="uilldmduw"/>
<item id="wl2323ldsaw"/>
</ITEMS>
このリストをデータベースの「items」テーブルと比較し、xmlノードの1つにも存在するIDを持つ行のみを返す必要があります。
XMLには数百のノードを含めることができ、itemsテーブルには100kの行を含めることができます
最善のアプローチは何ですか
XMLを解析し(たとえば、SimpleXMLを使用して)、すべてのIDを配列に収集します。次に、その配列をデータベースクエリで使用します。
$query = sprintf('SELECT id, field, field2
FROM table
WHERE
id IN(%s)',
implode(',', $id_array));
$id_array
(このコードは、内のすべての要素が整数であることが保証されているか、正しくSQLエスケープされていることを前提としていることに注意してください。このコードを使用する前に、これを自分で確認する必要があります。そうしないと、SQLインジェクションのリスクがあります)
以下は、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
?>
お役に立てれば。