私は助けが必要です
私は2つのテーブルを持っているという仮定
table1 : 製品
-----------------------------
| id | Code | any else field |
-----------------------------
| 10 | GA 12 | -------------- |
| 11 | GA 1 | -------------- |
-----------------------------
table2 : 在庫
---------------------------------------------
| id | product_id | color | size | stock |
---------------------------------------------
| 1 | 10 | Black | M | 12 |
| 2 | 10 | Yellow | L | 10 |
| 3 | 10 | Black | S | 12 |
| 4 | 10 | Yellow | XL | 10 |
| 5 | 10 | Red | S | 10 |
| 6 | 10 | Black | XL | 12 |
| 7 | 10 | Yellow | M | 10 |
| 8 | 10 | Red | L | 12 |
| 9 | 10 | Red | XL | 12 |
| 10 | 10 | Gray | M | 12 |
---------------------------------------------
私たちが見ることができるテーブルから
product_id 10 の場合、4 色あります
Black with size S M and XL
Red with size S L and XL
yellow M L and XL
Gray M
product_id 10 の平均サイズ範囲は S ~ XL です
その2つのテーブルから、以下のように私のウェブサイトに結果が必要です
そして、私は以下のようにphpとmysqlクエリを使ってみました:
function getProduct(){
$Condb = @new MySQLi(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$Condb->connect_errno and die ('Connect Failed : '.$Condb->connect_error);
$sql = "
SELECT product.*
FROM product
";
$res2 = $Condb->query($sql);
while ($row = $res2->fetch_assoc()){
$return_data[] = $row;
}
$res2->close();
$Condb->close();
$return ['data'] = $return_data;
return $return;
}
--
function list_stock($product_id){
$Condb = @new MySQLi(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$Condb->connect_errno and die ('Connect Failed : '.$Condb->connect_error);
//Distinct to get size range from product_id
$sql = "
SELECT DISTINCT size FROM stock WHERE product_id='$product_id'
ORDER BY uk ASC
";
$res2 = $Condb->query($sql);
$return_size_range = array();
while ($row = $res2->fetch_assoc()){
$return_size_range[] = $row['size'];
}
$res2->close();
$return_stock[] = array();
$return_color = array();
$sql = "
SELECT * FROM stock
WHERE product_id='$product_id'
GROUP BY product_id, color, size
ORDER BY warna, uk ASC
";
$res2 = $Condb->query($sql);
$n = 0;
$w = 0;
while ($row = $res2->fetch_assoc()){
$size_index = 0;
if($n%count($return_size_range)== 0){
$color=$row['color'];
$return_color[$w]=$color;
$w=$w+1;
$n=0;
}
while($size_index == 0){
if($return_size_range[$n] == $row['size']){
$sz = $row['size'];
$return_stock[$n]['size' . $color] = $sz;
$return_stock[$n]['stock' . $color . $sz] = $row['stock'];
$size_index=1;
}else{
$size_index=0;
}
$n += 1;
}
}
$res2->close();
$Condb->close();
$return ['color'] = $return_color;
$return ['size'] = $return_size_range;
$return ['stock'] = $return_stock;
return $return;
}
HTMLの場合、以下のコードを使用します:
<?php
$product = getProduct();
$product_detail = $product['data'];
?>
<table>
<tr>
<!-- header of table -->
<tr>
<?php
for($p=0 ; $p<count($produk_detail); $p++){
?>
<tr>
<!-- produk_detail -->
<tr>
<tr>
<td> <!-- with colspan from produk detail column -->
<?php
$stock_detail = list_stock($product_detail[$p]['id']);
$size = $stock_detail['size'];
$color = $stock_detail['color'];
$stock = $stock_detail['stock'];
?>
<table>
<tr>
<td>color</td>
<?php
for($s=0; $s<count($size); $s++){
echo '<td>' . $size[$s] . '</td>';
}
?>
</tr>
<?php
for($c=0; $c<count($color); $c++){
?>
<tr>
<td><?php echo $color[$c]; ?></td>
<?php
for($st=0; $st<count($size); $st++){
echo '<td>';
echo isset($stock[$st]['stock' . $color[$c] . $size[st]]) ? $stock[$st]['stock' . $color[$c] . $size[st]] : 0;
echo '</td>';
}
?>
</tr>
<?php
}
?>
<tr>
</tr>
</table>
</td>
<tr>
<?php
}
?>
<table>
上記のソースコードに基づいて、添付した画像の結果を取得することに成功しましたが、コードが非常に長く、製品と在庫の詳細を取得するのに読み込みが遅くなります。
ソース コード (php) と私のソース コードからの mysql クエリをより単純にすることは可能ですか?? または、単純なphpおよびmysqlクエリで添付された画像として結果を取得することは可能ですか??
ありがとう