我是 php 新手。您能否帮我找到正确安排以下任务的方法:
表“产品”
ID - 详细信息
1 - 1-30,2-134:6:0;;2-7:55:0;;1-2,2-8:25:0 - 此字符串可能很长
2 -
3 - 1-360:17:0;;1-361:185:0
每个产品 1, 2, 3, ... 都存储在 db 中的一行中,尽管产品还按尺寸和颜色单独识别。这就是为什么有些产品的尺寸和颜色比其他产品多的原因。有时产品只有一种尺寸,但有一些颜色。在这种情况下,这一种尺寸不存储在 db 中,而只存储在颜色中。表被不规则地填满。详细信息列不是必需的(可以为空)。详细信息列以这种方式组成,例如:
1-30,2-134:6:0;;2-7:55:0 其中主要分隔符是';;',所以这个字符串将被拆分为:
1-30 ,2-134:6:0
2-7:55:0
考虑到第一个拆分行,接下来要拆分的部分:
1-30 - 第一部分
2-134 - 第二部分
6 - 第三部分
0 -第四个部分
始终出现第一个、第三个和第四个部分。第二部分有时会出现。第一部分和第二部分可以从 1-XXX 或 2-XXX 开始。第三部分表示库存的产品数量。第四部分不重要,可以忽略。
表“类型”
id - 值
1 - 产品
2 - 颜色
表“参数”
id - 值
1 - sr20 h12
2 - sr21 h13
3 - 蓝色
..
30 - sr25 h15
134 - 红色
考虑到上面的表格,前面提到的例子意味着:
1-30 表示 1=product,30=sr25 h15
2-134 表示 2=color,134=red
您能否帮我准备 php 脚本,以正确显示产品的方式:
产品 1 - 尺寸:sr25 h15,颜色:红色,有货:6
产品 1 - 尺寸:sr30 h16,颜色:蓝色,有货:13
产品1 - 尺寸:sr35 h20,颜色:粉色,有货:2
产品 2
产品 3 - 颜色:白色,有货 4
感谢比尔的建议,我将文件拆分为:
$products = explode(";;", $details);
foreach ...
$fields = explode(":", $products);
foreach ...
$attribs = explode(",", $fields);
foreach ...
但是,我不知道应该如何使用:
($attrib_type, $attrib_value) = explode("-", $attribs[0]);
我还为参数准备了预加载的关联表,但我不知道如何使用它。
这是我的代码:
$results = mysql_query("SELECT id, name, details FROM products") or die ('query error');
if(mysql_num_rows($results) > 0) {
echo "<table width='780' cellpadding='2' border='1' rules='rows'>";
echo "<th width=50 align='left'>ID</th>";
echo "<th width=350 align='left'>Name</th>";
echo "<th width=380 align='left'>Details</th>";
while($r = mysql_fetch_array($results))
{
echo "<tr>";
echo "<td width=50 align='left'>".$r[0]."</td>";
echo "<td width=350 align='left'>".$r[1]."</td>";
//echo "<td width=350 align='left'>".$r[2]."</td>";
$string = "$r[2]";
$products = explode(';;', $string);
foreach ($products as $p)
{
$fields = explode(':', $p);
foreach ($fields as $f)
{
$attribs = explode(',', $f);
foreach ($attribs as $a)
{
$attrib_type_value = explode('-', $a);
foreach ($attrib_type_value as $t)
{
if ($t[0] == 1 or $t[0] == 2)
{
$query1 = mysql_query("SELECT products_type.id FROM products_type WHERE products_type.id ='$t'")
or die('error query1: ' . mysql_error());
$query2 = mysql_query("SELECT products_arguments.value FROM products_arguments WHERE products_arguments.id = '$t'")
or die('errur query2: ' . mysql_error());
if(mysql_num_rows($query1) > 0)
{
while($r2 = mysql_fetch_array($query1))
{
echo "<tr>
<td width=350 align='left'>".$r2[0]."</td>";
echo "</tr>";
}
}
}
}
}
}
}
echo "</tr>";
}
echo "</table>";
}