【问题标题】:Load xml products into mysql db, update where productid exist, insert where new and delete where productid in db not in xml将xml产品加载到mysql db中,更新productid存在的位置,插入新的位置并删除db中的productid而不是xml
【发布时间】:2012-06-21 22:28:40
【问题描述】:

我有一个动态产品 xml 文件,我需要从外部源加载并保存在 db 表中。现在我想保持包含当前产品的 xml 文件与表中的内容同步。所以我想确保我用 xml 和 db 表中的 ID 更新产品,插入新产品并删除那些在 db 表中过时的产品(它们不在 xml 文件中)见下图
XML 文件映射

Productid->1 and product-name->book,
Productid->2 and Prouct-name->pen

下表

身份证名称
1 本书
3支铅笔

现在我想用 xml 中的信息更新产品 ID 1,将 xml 中的产品 ID 2 插入表中,并从表中删除产品 ID 3,因为它在 xml 中找不到

感谢任何帮助。

【问题讨论】:

  • 这或多或少是一个职位描述。但是您的问题到底是什么?

标签: php mysql xml


【解决方案1】:

由于您已经有了所需流程的流程图,它应该非常简单。

我不会按照您的要求进行任何数据清理/转义。

XML FILE: (save it as testFeed.xml)

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <id>1</id>
        <name>book</name>
    </product>
    <product>
        <id>2</id>
        <name>pen</name>
    </product>
</products>

PHP Code:

<?php
$xml = simplexml_load_file( 'testFeed.xml' );
$xpath = $xml->xpath( '//product' );

$feed = array();
foreach( $xpath as $node ) {
    $feed[(string)$node->id] = (string)$node->name;  // id is key, name is value
}

// delete all entries from table where the table entries are not in the xml
$sql = 'DELETE FROM `table` WHERE id NOT IN 
          (' . implode( ',', array_keys( $feed ) ) . ')';
$run = mysql_query( $sql, $link );

//Now, insert/update - USE MySQL's "INSERT ... ON DUPLICATE UPDATE" feature
foreach( $xpath as $key => $node ) {
    $sql = 'INSERT INTO `table` (id,name) VALUES ("'.$key.'","'.$node.'") 
              ON DUPLICATE KEY UPDATE name="'.$node.'";'
    $run = mysql_query( $sql, $link );
}
?>

MySQL INSERT ... ON DUPLICATE UPDATE 此处为示例。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2018-01-02
    • 2021-07-24
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多