Данные из нескольких mysql таблиц в одну xml - PullRequest
1 голос
/ 27 мая 2020

Мне нужна помощь. Я застрял.

У меня 4 стола. У них один и тот же артикул. В таблице изображений несколько строк связаны с одним артикулом. Это означает, что есть больше изображений, принадлежащих одному продукту.

Изображения стола: артикул, изображение Продукты стола: артикул,,, Цены стола: артикул, цена Изображения стола артикул, изображение

I´ Я хотел бы получить этот результат в 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>

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 27 мая 2020

В вашем l oop просто выведите изображение, если артикул совпадает с последним.

$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']));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...