使用php和mysql插入xml

8cdiaqws  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(395)

假设你有一个包含80种商品的xml.file文件在一个商店里
这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”中的“many”图片。
我的问题是:我应该将数据保存在关系表中,每个元素都有列(relational),因为有很多图片,我认为这些图片需要外键到产品的id。
我已经能够使用dom/simple\uxml在页面上回显产品,而不需要数据库,但是我有一种烦人的感觉,我应该把数据放到数据库中,这样我就可以用mysql select语句更方便地查询了。
我甚至和一个开发人员谈过,在wordpress元表上看到图片的url被逗号分隔在一个表中。我以为这在德银大陆是很糟糕的做法?
麻烦的是,当我有许多其他的图片与一个id相关联时,似乎很难将外键附加到该id上在foreach/循环产品时,get last id似乎很混乱。
这是我的代码,但是如果我决定使用dom路径,并且不需要将数据放在dbase中,我认为它是无用的。

$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 

}
jbose2ul

jbose2ul1#

给你

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;
}

相关问题