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

How to get the amount data from JSON (from SQL DB), and insert that within an already existing WHILE loop?

提问人:Cazlo 提问时间:11/9/2022 最后编辑:Cazlo 更新时间:11/10/2022 访问量:35

问:

我正在制作一个订单页面,人们可以在其中查看他们过去的订单

目前,我得到的数据如下:

$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>
                  ";
                }
              }
            }

现在,至于我想要完成什么;

我还有一个列,将订购的产品数量(最初来自表)保存为 JSON;
即:(第二个数字是金额)。
amountscart{ "1":"3", "2":"2", "3":"7" }

类似于产品在 JSON 中保存的方式;
即:(第二个数字是产品 ID)。
{ "1":"9", "2":"12", "3":"2" }


将这些数量值导入原始 WHILE 循环的最佳方法是什么?我尝试单独获取金额数据;

$amounts     = utf8_encode($order->amounts);
$amountAssoc = json_decode($amounts, true);

并将其放在原始的 WHILE 中;

if (!$amountAssoc == "") {
     foreach ($amountAssoc as $key => $value) {
        echo $value;
   }
}

这导致每次加载新产品时,所有产品金额都会一个接一个地写出来。


对我来说,实现这一点的最佳方法是什么? 我应该坚持使用这个 WHILE 循环并重构它,我应该重构数据库还是缺少一些简单的解决方案?

php sql json while-loop foreach

评论


答:

0赞 Cazlo 11/10/2022 #1

好吧,我自己已经想出了一个(非常简单的)解决方案,我会把它发布在这里,以防万一其他人遇到类似的问题并正在寻找答案。

我删除了该列并更改了该列以包含该数据。amountsproducts

它在哪里;

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

(第一个数字只是每个产品的计数器,

它现在就像;

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

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


由于它位于单个 JSON 列中,因此读出其值变得像回显$value一样简单。