簡體   English   中英

PHP foreach中的SQL查詢

[英]SQL queries in php foreach

我有一段代碼。 在foreach中有SQL查詢,我知道這不好,但是我無法提供有關如何優化這段代碼的線索。 我必須檢查是否存在名稱為$ item ['product_name']的行 ,如果不是-插入表中,依此類推,請幫幫我

$sqlData = "";
        foreach ($data as $item) {
            $item['product_name'] = str_replace('"', '', $item['product_name']);

            $productData = $this->_conn->prepare("SELECT id FROM product WHERE `name` = '" . $item['product_name'] . "'");
            $warehouseData = $this->_conn->prepare("SELECT id FROM warehouse WHERE `name` = '" . $item['warehouse'] . "'");

            $productData->execute();
            $warehouseData->execute();

            if ($row = $productData->fetch(PDO::FETCH_ASSOC)) {
                $productID = $row['id'];
            } else {
                $this->_conn->prepare("INSERT INTO product (`name`) VALUES ('" . $item['product_name'] . "')")->execute();
                $productID = $this->_conn->lastInsertId();
            }
            if ($row = $warehouseData->fetch(PDO::FETCH_ASSOC)) {
                $warehouseID = $row['id'];
            } else {
                $this->_conn->prepare("INSERT INTO warehouse (`name`) VALUES ('" . $item['warehouse'] . "')")->execute();
                $warehouseID = $this->_conn->lastInsertId();
            }

            $tmpItem = implode(',', [$productID, $warehouseID, $item['quantity'], time()]);
            $sqlData .= '(' . $tmpItem . ')';
            if (next($data))
                $sqlData .= ',';
        }

        $sql = "INSERT INTO wh_quantity (product_id, wh_id, quantity, created_at) VALUES " . $sqlData;
        $this->_conn->prepare($sql)->execute();

如果您樂觀地表示“不是在循環中運行一百萬條選擇/插入語句”以便將大量數據加載到數據庫中,那么另一種方法是將大量數據加載到數據庫中(使用數據庫使用的任何批量加載工具),然后運行一條SQL語句,該語句將批量加載表中的數據與目標表中的數據進行比較

可以使用諸如MERGE查詢之類的數據將數據從一個表轉移到另一個表,更新存在匹配項的某些行,插入不存在匹配項的其他行

在操作結束時,您轉儲加載的批量數據

您應該檢查您的If語句

你有這個:

  if ($row = $productData->fetch(PDO::FETCH_ASSOC)) {
            $productID = $row['id'];
        }

應該是這樣

  if ($row == $productData->fetch(PDO::FETCH_ASSOC)) {
            $productID = $row['id'];
        }
  • 單=將分配給變量,但雙=將運行檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM