私は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、... は 1 行で db に格納されますが、製品はさらにサイズと色ごとに個別に認識されます。そのため、一部の製品は他の製品よりも多くのサイズと色を持つことができます. 場合によっては、商品のサイズが 1 つだけで、色がいくつかある場合があります。このような場合、この 1 つのサイズは 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
- 2番目の部分
6 - 3番目の部分
0 - 4番目の部分
たまに第二弾が出ます。前編と後編は、1-XXX または 2-XXX から開始できます。3 番目の部分は、在庫のある製品の数を意味します。4 番目の部分は重要ではないため、無視できます。
テーブル「タイプ」
ID - 値
1 - 製品
2 - 色
テーブル「引数」
id - 値
1 - sr20 h12
2 - sr21 h13
3 - 青
..
30 - sr25 h15
134 - 赤
上記の表を考慮すると、前述の例は次のことを意味します
。1-30 は 1=製品、30=sr25
h15 を意味します。2-134 は 2=色、134=赤を意味します。
方法で製品を適切に表示する php スクリプトを準備するのを手伝ってくれませんか:
製品 1 - サイズ: sr25 h15、色: 赤、在庫あり: 6
製品 1 - サイズ: sr30 h16、色: 青、在庫あり: 13
製品1 - サイズ: sr35 h20, 色: ピンク, 在庫あり: 2
製品 2
製品 3 - 色: ホワイト, 在庫あり 4
Bill の提案のおかげで、次のようにファイルを分割しました
。
foreach ...
$fields = expand(":", $products);
foreach ...
$attribs = expand(",", $fields);
foreach ...
ただし、どのように使用すればよいかわかりません:
($attrib_type, $attrib_value) = expand("-", $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>";
}