我正在做一个 * 订单 * 页面,人们可以看到他们过去的订单。
目前,我得到的数据如下:
$qry = "SELECT * FROM `orders` WHERE `id` = ? AND `user_id` = ?";
$stmt = $conn->prepare($qry);
$stmt->bind_param("ii", $order, $id);
$stmt->execute();
$order = $stmt->get_result()->fetch_object();
$data = utf8_encode($order->products);
$dataAssoc = json_decode($data, true);`
然后在HTML中读取(对于products
列中的每个产品),如下所示;
(读出产品标题、版本、价格等)
if (!$dataAssoc == "") {
foreach ($dataAssoc as $key => $value) {
// Get product data
$qry = "SELECT * FROM `products` WHERE `id`= ?";
$stmt = $conn->prepare($qry);
$stmt->bind_param("i", $value);
$stmt->execute();
$productData = $stmt->get_result();
while ($product = $productData->fetch_object()) {
echo "
<div class='col'>
<div class='product'>
<div class='thumbnail'>
<img src='assets/images/product/product-thumb/". $product->thumbnail . "' alt='product image'>
</div>
<div class='product-content'>
<div class='inner'>
<h5 class='title'>". $product->name . " (" . $product->version .")</h5>
<div class='product-price'>
<span class='price current-price'>€". str_replace('.', ',', $product->price) . "</span>
</div>
</div>
</div>
</div>
</div>
";
}
}
}
现在,至于我试图完成什么;
我还得到了一个amounts
列,它将订购的产品数量(最初来自cart
表)保存为JSON;
即:{ "1":"3", "2":"2", "3":"7" }
(第二个数字是数量)。
与JSON中保存产品的方式类似;
即:{ "1":"9", "2":"12", "3":"2" }
(第二个数字是产品ID)。
将这些金额值放入原始WHILE循环的最佳方法是什么?
$amounts = utf8_encode($order->amounts);
$amountAssoc = json_decode($amounts, true);
并将其置于原始WHILE中;
if (!$amountAssoc == "") {
foreach ($amountAssoc as $key => $value) {
echo $value;
}
}
这导致每次装入新产品时,所有产品数量都一个接一个地写出。
什么是我实现它的最好方法?我应该坚持这个WHILE循环并重新构造它吗?我应该重新构造数据库吗?还是我缺少一些简单的解决方案?
1条答案
按热度按时间bvuwiixz1#
好吧,我自己已经想出了一个(相当简单的)解决方案,我会把它贴在这里,以防其他人遇到类似的问题,并正在寻找答案。
我已经删除了
amounts
列,并更改了products
列以包含该数据。它是第一个;
(with第一个数字仅仅是对于每个产品上升的计数器,
它现在的样子;
第一个(键)是产品,第二个(值)是它的数量。
由于它位于 * 单个 * JSON列中,阅读它的值就像回显
$value
一样简单。