XML вставка с PHP и MySQL - PullRequest
       2

XML вставка с PHP и MySQL

0 голосов
/ 17 октября 2018

Представьте, что у вас есть xml.file с 80 продуктами в магазине (это будет лента новостей, но я не хочу путать вопрос)

В 80 продуктах много элементов, таких как

    <product> 
    <price> millions </price>
    <colour> red </colour>
    <pictures> <pic> picture1_url </pic> <pic> picture2_url </pic> 
 <pic>picture3_url </pic>
 </pictures>
    </product >

Ваш клиент хочет использовать .xml на веб-странице / в приложении, где его клиенты могут искать данные по цене и цвету с помощью формы поиска и просматривать «множество» изображений, вложенных в основной элемент «product».».

Мой вопрос таков: должен ли я сохранять данные в реляционной таблице со столбцами для каждого элемента (реляционные, потому что есть много изображений, которые, как я полагаю, должны будут иметь внешний ключ с идентификатором продукта.

Я был в состоянии использовать dom / simple_xml для отображения продуктов на странице без необходимости в базе данных, но у меня возникло неприятное чувство, я должен поместить данные в БД, чтобы я мог легче запрашивать их с помощью операторов выбора mysql.

Я даже поговорил с разработчиком и увидел в мета-таблицах WordPress, что URL-адреса для картинок хранятся в одной таблице через запятую. Я думал, что это очень плохая практика в БД-земле?

Проблема, кажется, оченьТрудно прикрепить внешний ключ к 1 идентификатору, когда у меня есть много других картинок, которые можно связать с этим идентификатором ... (последний код, кажется, запутывается при foreach / зацикливании продуктов.

Вот мой код, но я полагаю,бесполезно, если я решу пойти по маршруту и ​​не нужно помещать данные в базу данных.

 $xml = simplexml_load_file('products.xml') or die("can not find it");

        foreach($xml->product as $row){ 


         $price  =   $row->price
        $colour  =$row->colour
        $pictures =  $row->pictures 

        $sql= insert into products table 

}

1 Ответ

0 голосов
/ 18 октября 2018

Вот, пожалуйста,

CREATE TABLE products (id INT NOT NULL PRIMARY KEY auto_increment, colour VARCHAR(25), price DECIMAL)

Обратите внимание, что цена является десятичной - обычная практика сохранять цены в десятичных числах

CREATE TABLE pictures (id INT NOT NULL PRIMARY KEY auto_increment, picture_url VARCHAR(100))

CREATE TABLE relations (product_id INT, picture_id INT)

Вставка значений ...

INSERT INTO products VALUES (NULL, 'red', 100500.00)
INSERT INTO pictures VALUES (NULL, 'picture_url1');
INSERT INTO pictures VALUES (NULL, 'picture_url2');
INSERT INTO pictures VALUES (NULL, 'picture_url3');

Добавление отношения

INSERT INTO relations VALUES (1, 1);
INSERT INTO relations VALUES (1, 2);
INSERT INTO relations VALUES (1, 3);

И наконец - получение результата

SELECT price, colour, group_concat(pictures.picture_url) as 'pictures' FROM products, relations, pictures WHERE products.id = 1 AND
relations.product_id=products.id AND relations.picture_id=pictures.id

------------------------------------------------------
|price |colour|pictures                              |
------------------------------------------------------
|100500|red   |picture_url1,picture_url2,picture_url3|
------------------------------------------------------

Обновление.Используйте SimpleXML для вставки всех картинок

$new_xml = new SimpleXMLElement($xml_file);

foreach ($new_xml->product->pictures->pic as $pic) {
//this is your picture url
   $your_picture_url = $pic;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...