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
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
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
Autore Titolo Forum Risposte Data
B [PHP] IF condizioni e query annidate PHP 1
max75 query su due tabelle e dati doppioni MS Access 2
E Aiuto per query PHP 8
E Query differenza tra tabelle MySQL 5
E Query Alias PHP 4
T Query con date MS Access 1
K Inserimento query Errore 1366 PHP 4
L Query e selezione DB con $_POST PHP 2
M query update e delete PHP 0
A media degli elementi estratti da una query MySQL 0
S Passare query o utm alla pagina successiva Domini 1
O problema con query PHP 4
M Query PHP 8
R query DELETE non cancella i record PHP 1
G Query con i giorni della settimana MySQL 10
C bottone query MySQL 0
T Query su due tabelle con totali Database 4
G AVVISO QUERY IN ESECUZIONE PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
S Selezionare ultimo record di una sotto query MySQL 27
G Menù a tendina di ricerca con query PHP 1
V Query per una somma PHP 2
F stampare a video i risultati della query PHP 1
L problema con query select PHP 2
D Query sum Database 1
M Visualizzazione a video risultati query php PHP 0
A form PHP prenotazione tramite query PHP 2
R Problema query con ricerca id numerico PHP 2
G Casella combinata in una query MS Access 4
R Aiuto con le query MS Access 2
Y query di DELETE PHP 4
V Query Oracle Oracle 0
L query somma PHP 8
W Query SQL Classic ASP 2
M Problemi con query a più tabelle PHP 3
Alex_70 Conteggio nella query PHP 0
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
A nome file che contiene punto passato come parametro a query PHP 31
F query e form con select multipla PHP 17
M Problema su query JOIN in tre tabelle PHP 0
M Ordinare una query join PHP 2
Alex_70 Query ORDER BY PHP 18
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
Alex_70 foreach explode query PHP 3
O query con date in formato stringa PHP 3
Tommy03 Unione query di 4 tabelle MySQL 1
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
Alex_70 Query group actor e film PHP 26
TpD Incolonnare risultati query (mysql_result deprecato...) PHP 3

Discussioni simili