如何从JSON(从SQL DB)获取数量数据,并将其插入到已经存在的WHILE循环中?

yr9zkbsy  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(150)

我正在做一个 * 订单 * 页面,人们可以看到他们过去的订单。
目前,我得到的数据如下:

$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循环并重新构造它吗?我应该重新构造数据库吗?还是我缺少一些简单的解决方案?

bvuwiixz

bvuwiixz1#

好吧,我自己已经想出了一个(相当简单的)解决方案,我会把它贴在这里,以防其他人遇到类似的问题,并正在寻找答案。
我已经删除了amounts列,并更改了products列以包含该数据。
它是第一个;

{ "1":"3", "2":"2", "3":"7" }

(with第一个数字仅仅是对于每个产品上升的计数器,
它现在的样子;

{ "5":"3", "7":"2", "2":"7" }

第一个(键)是产品,第二个(值)是它的数量。

由于它位于 * 单个 * JSON列中,阅读它的值就像回显$value一样简单。

相关问题