Query annidate o cicli

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Buonasera a tutti,sono qui a chiedervi un consiglio su come gestire una problematica. Arrivo al dunque: ho 2 tabelle Mysql,una è una tabella temporanea e l'altra contiene una serie di articoli con descrizioni varie e relative quantità. Ora,per ogni recordi della tabella temporanea dovrei leggere il valore id_articolo,andare nella tabella articoli ed aggiornare la quantità per quel codice articolo( leggere il valore attuale e fare - 1). Ora...potrei risolvere il tutto con una select e un ciclo di update e sicuramente funzionerà,ma volevo sapere se esiste un modo per fare tutto in maniera contestuale ( così imparo qualcosa di nuovo). Spero di essere stato chiaro...

Grazie a tutti
E
 
Buongiorno a tutti, giusto per completezza vi posto il codice che ho buttato giù al volo, lo sto ancora testando, ma più o meno fa quello che deve fare.

PHP:
$sql="select carrello.*,articoli.* from carrello left join articoli on carrello.id_prodotto=articoli.id_articolo where carrello.id_vendita=:id_vendita";
   $query=$dbh->prepare($sql);

 $query->bindParam(':id_vendita',$_SESSION['id_vendita'],PDO::PARAM_STR);
 $query->execute();
 $results=$query->fetchAll(PDO::FETCH_OBJ); 
 if($query->rowCount() > 0)
{ 

 foreach($results as $row)
    {

    // ========================= Leggo il valore id_articolo dal carrello ========================================

    $id_articolo_carrello=$row->id_prodotto;
    $quantita=$row->quantita;
    $quantita_da_aggiornare = $quantita-1;
    $prezzo_finale = $row->carrello_prezzo_vendita;
  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);           
    try {
        
      $dbh->beginTransaction();

      //Scrivo i dati nella tabella Vendite
      $sql2="insert into vendite (id_prodotto,id_vendita,data_vendita,prezzo_vendita) Values (:id_prodotto,:id_vendita,:data_vendita,:prezzo_vendita)";
      $query2=$dbh->prepare($sql2);

      $query2->bindParam(':id_prodotto',$id_articolo_carrello,PDO::PARAM_STR);
      $query2->bindParam(':id_vendita',$_SESSION['id_vendita'],PDO::PARAM_STR);
      $query2->bindParam(':data_vendita',$venduto_data,PDO::PARAM_STR);
      $query2->bindParam(':prezzo_vendita',$prezzo_finale,PDO::PARAM_STR);

      $query2->execute();

 // =========================Aggiorno le quantità di magazzino ========================================

      $sql2="Update articoli set quantita=:quantita_da_aggiornare where id_articolo=:idarticolo";
      $query2=$dbh->prepare($sql2);

      $query2->bindParam(':quantita_da_aggiornare',$quantita_da_aggiornare,PDO::PARAM_STR);
      $query2->bindParam(':idarticolo',$id_articolo_carrello,PDO::PARAM_STR);

      $query2->execute();           
      

 // ========================= Cancello i dati della vendita dal carrello ========================================

      $sql2="delete from carrello where id_vendita=:id_vendita";
      $query2=$dbh->prepare($sql2);

      $query2->bindParam(':id_vendita',$_SESSION['id_vendita'],PDO::PARAM_STR);
 
      $query2->execute();           
      $dbh->commit();


    } catch (PDOException $e) {

      $message = $e->getMessage();
      echo '<script type="text/javascript">alert("'.$message.'");</script>';             
      $dbh->rollback();
    
    }

Nel post precedente vi chiedevo se esiste un modo per fare la stessa cosa utilizzando codice sql piuttosto che cicli variabili ecc...
Grazie a TUTTI
E
 

Discussioni simili