【问题标题】:Data from multiple mysql tables into one xml来自多个mysql表的数据到一个xml
【发布时间】:2020-05-27 23:06:48
【问题描述】:

我需要帮助。我被困。

我有 4 张桌子。他们共享相同的“sku”。在图像表中,有几行连接到一个“sku”。这意味着,有更多图像属于一种产品。

表格图片:sku、图片 表产品:sku,,,, 表价格:sku,价格 表格图片 sku、图片

我想在 xml 中得到这个结果:

<rss version="2.0" data-websigner.1.0.7="true">
<products>
<product>
<sku>B291606</sku>
<skupina>PB290306</skupina>
<nazov>B&C•HIGHLANDER+ , charcoal, S</nazov>
<kategoria>Textil>Flisové bundy>Krátky zips</kategoria>
<farba>charcoal</farba>
<velkost>S</velkost>
<sklad>1</sklad>
<cena>24.02</cena>
<images>
 <image>1.jpg</image>
 <image>2.jpg</image>
 <image>3.jpg</image>
</images>
</product>

我使用这个代码:

$sql = 'SELECT 
    sku,
    nazov,
    kategoria1,
    kategoria2,
    kategoria3,
    skupina,
    farba,
    velkost,
    sklad,
    cena,
    image
FROM
    products
INNER JOIN
    stock USING (sku)
INNER JOIN
    price USING (sku)
JOIN
    sparks_images USING (sku)
';

$result = mysqli_query($conn, $sql);


    $rss = new SimpleXMLElement('<rss version="2.0" />');
    $products = $rss->addChild('products');


    while($row = mysqli_fetch_array($result)){
        $product = $products->addChild('product');
        $product->addChild('sku', htmlspecialchars($row['sku']));
        $product->addChild('skupina', htmlspecialchars($row['skupina']));
        $product->addChild('nazov', htmlspecialchars($row['nazov']));
        $product->addChild('kategoria', htmlspecialchars($row['kategoria1']).'>'.htmlspecialchars($row['kategoria2']).'>'.htmlspecialchars($row['kategoria3']));
        $product->addChild('farba', htmlspecialchars($row['farba']));
        $product->addChild('velkost', htmlspecialchars($row['velkost']));
        $product->addChild('sklad', htmlspecialchars($row['sklad']));
        $product->addChild('cena', htmlspecialchars($row['cena']));
        $product->addChild('image', htmlspecialchars($row['image']));
}

    Header('Content-type: text/xml');
    print($rss->asXML());

我得到的输出是这样的:

<products>
<product>
<sku>B291606</sku>
<skupina>PB290306</skupina>
<nazov>B&C•HIGHLANDER+ , charcoal, S</nazov>
<kategoria>Textil>Flisové bundy>Krátky zips</kategoria>
<farba>charcoal</farba>
<velkost>S</velkost>
<sklad>1</sklad>
<cena>24.02</cena>
<image>
1.jpg
</image>
</product>
<product>
<sku>B291606</sku>
<skupina>PB290306</skupina>
<nazov>B&C•HIGHLANDER+ , charcoal, S</nazov>
<kategoria>Textil>Flisové bundy>Krátky zips</kategoria>
<farba>charcoal</farba>
<velkost>S</velkost>
<sklad>1</sklad>
<cena>24.02</cena>
<image>
2.jpg
</image>
</product>
</products>

感谢您的任何帮助。

【问题讨论】:

    标签: mysql xml


    【解决方案1】:

    如果 sku 与上一个相同,则在您的循环中输出图像。

    $last_sku = null;
    
    while($row = mysqli_fetch_array($result)){
        if ( $last_sku == $row['sku'] ){
            // ouput only image
            $product->addChild('image', htmlspecialchars($row['image']));
            continue;   // go to next in the array
        }
    
        $last_sku = $row['sku'];
    
        $product = $products->addChild('product');
        $product->addChild('sku', htmlspecialchars($row['sku']));
        $product->addChild('skupina', htmlspecialchars($row['skupina']));
        $product->addChild('nazov', htmlspecialchars($row['nazov']));
        $product->addChild('kategoria', htmlspecialchars($row['kategoria1']).'>'.htmlspecialchars($row['kategoria2']).'>'.htmlspecialchars($row['kategoria3']));
        $product->addChild('farba', htmlspecialchars($row['farba']));
        $product->addChild('velkost', htmlspecialchars($row['velkost']));
        $product->addChild('sklad', htmlspecialchars($row['sklad']));
        $product->addChild('cena', htmlspecialchars($row['cena']));
        $product->addChild('image', htmlspecialchars($row['image']));
    }
    

    【讨论】:

    • 谢谢。但我得到相同的结果。 xml.topgift.sk/output.php
    • Sorry Silly Typo 代表我将 $last_sku == $row['sku']; 更改为 $last_sku = $row['sku'];
    猜你喜欢
    • 2016-04-29
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多