0

Webサービスを介してxmlデータを取得しています

<ITEMS>
     <item id="uilldmduw"/>
     <item id="wl2323ldsaw"/>
</ITEMS>

このリストをデータベースの「items」テーブルと比較し、xmlノードの1つにも存在するIDを持つ行のみを返す必要があります。

XMLには数百のノードを含めることができ、itemsテーブルには100kの行を含めることができます

最善のアプローチは何ですか

4

2 に答える 2

0

XMLを解析し(たとえば、SimpleXMLを使用して)、すべてのIDを配列に収集します。次に、その配列をデータベースクエリで使用します。

$query = sprintf('SELECT id, field, field2
                  FROM table
                  WHERE
                    id IN(%s)',
                 implode(',', $id_array));

$id_array(このコードは、内のすべての要素が整数であることが保証されているか、正しくSQLエスケープされていることを前提としていることに注意してください。このコードを使用する前に、これを自分で確認する必要があります。そうしないと、SQLインジェクションのリスクがあります)

于 2012-06-18T11:27:12.950 に答える
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
?>

お役に立てれば。

于 2012-06-18T11:32:08.240 に答える