假装您在商店中有一个包含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,他的客户可以使用搜索表单按价格和颜色搜索数据,并查看嵌套在主要元素“产品”中的“许多”图片。
我的问题是:我应该将数据保存在关系表中每个元素的列(关系式,因为有很多图片,我认为需要将这些图片外键到产品的id。
我已经能够使用dom / simple_xml来回显页面上的产品,而不需要数据库,但是我有i的感觉,我应该将数据放入db,因此我可以使用mysql select语句更轻松地查询。
我什至与开发人员交谈,并在wordpress元数据表上看到,图片的url被逗号分隔在一个表中。我认为这在db领域是非常糟糕的做法?
当我还有许多其他图片要与该ID关联时,将外键附加到1 ID似乎很困难。((在foreach /循环产品时,获取最后一个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
}
答案 0 :(得分:0)
你在这里
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;
}