Обновление одного и того же идентификатора с другим количеством (только обновление идентификатора, которое идет первым) - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в базе данных, я разрабатываю управление запасами, у меня есть четыре таблицы, две для purchase и purchase_detail.И еще два для sale и sale_detail.

Это изображение - моя purchase_detail таблица enter image description here, и это код для вставки новой покупки, и он отлично работает.

$sql_insert_sale = "INSERT INTO 
purchase(recipt_no,date,total,vat,totalwithvat) VALUES ( ?, ?, ? ,?, 
?)";
            $query = $dbh->prepare($sql_insert_sale);
            $query->bindParam(1, $recipt_no, PDO::PARAM_STR);
            $query->bindParam(2, $date, PDO::PARAM_STR);
            $query->bindParam(3, $price_all, PDO::PARAM_STR);
            $query->bindParam(4, $vat_all, PDO::PARAM_STR);
            $query->bindParam(5, $total_all, PDO::PARAM_STR);
            $query->execute();
            $lastInsertId = $dbh->lastInsertId();
            if ($lastInsertId) {
            $sql_insert_purchase = "INSERT INTO 
 purchase_detail(purchase_id, product_id,vat,price,quantity,amount) "
             . "VALUES ( :purchase_id 
,:product_id,:vat,:price,:quantity,:amount)";
                for($i=0;$i<count($partnumber);$i++) {
                    $data=array(
                                 ':purchase_id'=> $lastInsertId,
                                 ':product_id'=> $id[$i],
                                 ':vat'=> $vat[$i], 
                                 ':price'=> $amount[$i],
                                 ':quantity'=> $quantity[$i],
                                 ':amount'=> $total[$i]
                                );
                     $statement = $dbh->prepare($sql_insert_purchase);
                     if($statement->execute($data)){
                         echo "Successfull";
                     }else{
                         print_r($dbh->errorInfo());
                     }

и это моя sale_detail таблица enter image description here

У меня проблема с таблицей sale при обновлении quantity в purchase_detail стол.Как вы можете видеть, у нас один и тот же продукт с разным количеством, когда я делаю новую продажу, он всегда обновляет единственное количество строки с product_id, который идет первым.Ниже приведен код для новой продажи

$sql_insert_sale = "INSERT INTO 
  sale(recipt_no,cus_name,date,total)VALUES ( ?,?, ?, ? )";
        $query = $dbh->prepare($sql_insert_sale);
        $query->bindParam(1, $recipt_no, PDO::PARAM_STR);
        $query->bindParam(2, $cus_name, PDO::PARAM_STR);
        $query->bindParam(3, $date, PDO::PARAM_STR);
        $query->bindParam(4, $total_all, PDO::PARAM_STR);
                $query->execute();
                $lastInsertId = $dbh->lastInsertId();
                if ($lastInsertId) {
                    $sql_insert_sale = "INSERT INTO 
 sale_detail(sale_id, product_id,vat,price_vat,quantity,amount) "
 . "VALUES ( :sale_id,:product_id,:vat,:price_vat,:quantity,:amount)";
                 for($i=0;$i<count($partnumber);$i++) {
                    $data=array(
                                 ':sale_id'=> $lastInsertId,
                                 ':product_id'=> $id[$i],
                                 ':vat'=> $vat[$i], 
                                 ':price_vat'=> $price[$i],
                                 ':quantity'=> $quantity[$i],
                                 ':amount'=> $total[$i]
                                );
                     $statement = $dbh->prepare($sql_insert_sale);
                     if($statement->execute($data)){
                         $sql_update_purchase="UPDATE purchase_detail 
                     INNER JOIN product "
                                 . 
                  "on(purchase_detail.product_id=product.product_id) "
                                 . "SET 
      purchase_detail.quantity=purchase_detail.quantity-$quantity[$i]"
                                 . " WHERE 
    purchase_detail.product_id=$id[$i] and product.product_id=$id[$i]";
    $statement_update=$dbh->prepare($sql_update_purchase);
                         if($statement_update->execute())

Пожалуйста, расскажите, что не так с моим кодом, я очень ценю вашу помощь.Я близок к сроку завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...