Sommare i prezzi dei prodotti aggiunti al carrello di diverse aziende con Select sum php mysqli

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ciao a tutti,
sto cercando di sommare i prezzi dei prodotti aggiunti al carrello e che fanno parte di diverse aziende.
Il risultato che vorrei ottenere è il totale dei prezzi relativi ai prodotti aggiunti al carrello di ogni singola azienda.
Ho provato in vari modi ma non riesco ad ottenere la somma ma solo i singoli prezzi dei prodotti.

PHP:
foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $product_code = $cart_itm["product_code"];
    $coupon_shop = $cart_itm["coupon_shop"];
      
        $resultsomma = mysqli_query($conn,"SELECT SUM(prezzo_reale) AS total FROM coupons_coupons WHERE coupon_id=$product_code and coupon_shop=$coupon_shop");
                      
     while($rowsomma = $resultsomma->fetch_assoc()) {
$somma =$rowsomma['total'];
    echo "SHOP $coupon_shop TOT $somma<br>";                  
    }

Il risultato che ottengo è
SHOP 1 TOT 7.00
SHOP 1 TOT 14.00
SHOP 1 TOT 7.00
SHOP 10 TOT 1.00

mentre a me servirebbe ottenere il seguente risultato:
SHOP 1 TOT 28.00
SHOP 10 TOT 1.00

Dove sto sbagliando?
 

marino51

Utente Attivo
28 Feb 2013
3.001
173
63
Lombardia
puoi usare la stessa logica della soluzione precedente,

all'interno del loop ottieni 4 array
PHP:
    $coupon_shop[]    = $cart_itm["coupon_shop"];
    $product_code[]   = $cart_itm["product_code"];

    $product_qta[]    = $cart_itm["product_qta"];
    $product_prezzo[] = "SELECT prezzo ...."

dopo il loop trovi l'array univoca ed usandola, sommi i prezzi * qta
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Buonasera,
scusami Marino, ma non riesco a comprendere la query posso farla nell'array? per favore potresti farmi un esempio? Grazie
 

marino51

Utente Attivo
28 Feb 2013
3.001
173
63
Lombardia
no la query la esegui normalmente, il suo risultato (prezzo) lo inserisci nell'array

rettifica, visto che usi mysqli, si puoi farlo

PHP:
    $query = "SELECT ....
    $product_prezzo[] = $conn->query($query)->fetch_row()[0];
 
Ultima modifica:

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ho fatto in questo modo ma ottengo solo il totale della prima azienda e con risultati multipli. Dove sbaglio?
PHP:
$couponshopX = array();
$somma= array();
foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $product_code = $cart_itm["product_code"];
    $coupon_shop = $cart_itm["coupon_shop"];
        $product_qty = $cart_itm["product_qty"];
            $product_price = $cart_itm["product_price"];

          $sql = "SELECT prezzo_reale FROM coupons_coupons WHERE coupon_id=$product_code and coupon_shop=$coupon_shop ORDER BY coupon_shop ASC ";
    $result = $conn->query($sql);

    if ($result->num_rows > 0)
    {
        while($row = $result->fetch_assoc())
        {
            $somma[]=$row['prezzo_reale'];
      
          
        }
    }
   if (count($somma) > 0)
{
    $prezzo = array_unique($somma);
foreach ($prezzo as $prezzo)
{
        
        $sql = "SELECT prezzo_reale (SUM) as total FROM coupons_coupons WHERE coupon_id=$product_code and coupon_shop=$coupon_shop and prezzo_reale=$prezzo ORDER BY coupon_shop ASC ";
    $result = $conn->query($sql);

    if ($result->num_rows > 0)
    {
        while($row = $result->fetch_assoc())
        {
            $somma[]=$row['total'];
            $total = array_sum($somma);
          
        }
    }
  
}

}

Questo il risultato
shop: 1 prezzo: 36
shop: 1 prezzo: 36
shop: 1 prezzo: 36
shop: 1 prezzo: 36
shop: 10 prezzo: 36

Mentre dovrei ottenere
shop: 1 prezzo 35
shop 10 prezzo 1
 

marino51

Utente Attivo
28 Feb 2013
3.001
173
63
Lombardia
prova così,
PHP:
<?php
$coupon_shopS  = array();
$prezzo_realeS = array();

$s = -1;
foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $coupon_shop   = $cart_itm["coupon_shop"];
    $product_code  = $cart_itm["product_code"];
    $product_qty   = $cart_itm["product_qty"];
    $product_price = $cart_itm["product_price"];
    $prezzo_reale  = 0;

    $sql = "SELECT prezzo_reale FROM coupons_coupons WHERE coupon_id=$product_code AND coupon_shop=$coupon_shop";
    $result = $conn->query($sql);
    if ($result->num_rows > 0)
    {
        while($row = $result->fetch_assoc())
        {
            $prezzo_reale = $row['prezzo_reale'];
        }
    }

    if (!array_key_exists($coupon_shop, $coupon_shopS))
    {
        $s++;
        $coupon_shopS[$s]  = $coupon_shop;
        $prezzo_realeS[$s] = $prezzo_reale * $product_qty;
    }
    else
    {
        for ($x=0; $x < count($coupon_shopS); $x++)
        {
            if($coupon_shop == $coupon_shopS[$x])
            {
                $prezzo_realeS[$x] += $prezzo_reale * $product_qty;
                break;
            }
        }
    }
}

$prezzo_realeT = 0;

for ($x=0; $x < count($coupon_shopS); $x++)
{
    $prezzo_realeT += $prezzo_realeS[$x];

    echo "shop : " . $coupon_shopS[$s] . " prezzo : " . $prezzo_realeS[$x] . "<br />";
}
echo "<br />totale prezzo : " . $prezzo_realeT . "<br />";
?>
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Buongiorno Marino e grazie per l'attenzione.
Allora con il codice che mi hai postato ottengo i seguenti risultati:
shop : 10 prezzo : 14
shop : 10 prezzo : 14
shop : 10 prezzo : 16
shop : 10 prezzo : 12
shop : 10 prezzo : 1
totale prezzo : 57

Il totale generale è corretto mentre quelli per le aziende no. Infatti il risultato per essere corretto dovrebbe essere:

shop : 1 prezzo: 28 ( 3 prodotti uno da 14,00 e 2 da 7,00 )
shop : 8 prezzo: 28 ( 2 prodotti uno da 16,00 e l'altro da 12,00 )
shop : 10 prezzo: 1 ( 1 prodotto da 1,00 )
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.001
173
63
Lombardia
questa funzione "!array_key_exists" sembra che lavori male ho provato a sostituirla con "!isset" ma anch'essa ha problemi

come seconda cosa mi é rimasto un indice "$s" nella riga di stampa dei totali

orbene, questo é lo script modificato senza usare le funzioni sopraddette,
PHP:
<?php
$coupon_shopS  = array();
$prezzo_realeS = array();

$s = -1;
foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $coupon_shop   = $cart_itm["coupon_shop"];
    $product_code  = $cart_itm["product_code"];
    $product_qty   = $cart_itm["product_qty"];
    $product_price = $cart_itm["product_price"];
    $prezzo_reale  = 0;

    $sql = "SELECT prezzo_reale FROM coupons_coupons WHERE coupon_id=$product_code AND coupon_shop=$coupon_shop";
    $result = $conn->query($sql);
    if ($result->num_rows > 0)
    {
        while($row = $result->fetch_assoc())
        {
            $prezzo_reale = $row['prezzo_reale'];
        }
    }

    $trovato = false;
    for ($x=0; $x < count($coupon_shopS); $x++)
    {
        if($coupon_shop == $coupon_shopS[$x])
        {
            $trovato = true;
            $prezzo_realeS[$x] += $prezzo_reale * $product_qty;
            break;
        }
    }
    if (!$trovato)
    {
        $s++;
        $coupon_shopS[$s]  = $coupon_shop;
        $prezzo_realeS[$s] = $prezzo_reale * $product_qty;
    }
}

$prezzo_realeT = 0;

for ($x=0; $x < count($coupon_shopS); $x++)
{
    $prezzo_realeT += $prezzo_realeS[$x];

    echo "shop : " . $coupon_shopS[$x] . " prezzo : " . $prezzo_realeS[$x] . "<br />";
}
echo "<br />totale prezzo : " . $prezzo_realeT . "<br />";
?>

e questo il risultato
upload_2018-9-27_13-52-27.png
 
  • Like
Reactions: maxnegri

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Ti confermo che cosi funziona correttamente.
Quando hai tempo e se vuoi, potresti commentare un pò il codice così da comprendere bene il tutto e non essere solo colui che copia e incolla? :) Grazie mille !
 

marino51

Utente Attivo
28 Feb 2013
3.001
173
63
Lombardia
posto lo script che ho usato per le prove, funziona "isolato" e senza connessione al database
per tutte le domande, scrivi
PHP:
<?php
// questi sono i dati passati con la $_SESSION, creo l'array aggiungendo anche il 'prezzo_reale' vedi dopo il motivo
$_SESSION['cart_products']   = array
(
    array
    (
        'coupon_shop'        => 1,
        'product_code'       => 'prod12',
        'product_qty'        => 1,
        'product_price'      => 7.00,
        'prezzo_reale'       => 7.00,
    ),
    array
    (
        'coupon_shop'        => 10,
        'product_code'       => 'prod101',
        'product_qty'        => 1,
        'product_price'      => 1.00,
        'prezzo_reale'       => 1.00,
    ),
    array
    (
        'coupon_shop'        => 1,
        'product_code'       => 'prod13',
        'product_qty'        => 1,
        'product_price'      => 7.00,
        'prezzo_reale'       => 7.00,
    ),
    array
    (
        'coupon_shop'        => 8,
        'product_code'       => 'prod81',
        'product_qty'        => 1,
        'product_price'      => 16.00,
        'prezzo_reale'       => 16.00,
    ),
    array
    (
        'coupon_shop'        => 1,
        'product_code'       => 'prod11',
        'product_qty'        => 1,
        'product_price'      => 14.00,
        'prezzo_reale'       => 14.00,
    ),
    array
    (
        'coupon_shop'        => 8,
        'product_code'       => 'prod82',
        'product_qty'        => 1,
        'product_price'      => 12.00,
        'prezzo_reale'       => 12.00,
    ),
);

$coupon_shopS  = array();  // array che conterrà 'shop' in modo univoco
$prezzo_realeS = array();  // array che conterrà la somma per 'shop'

$s = -1;  // questo é l'indice usato per l'array, parte da -1 perchè la prima volta che si somma 1 assume valore 0, primo elemento dell'array
foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $coupon_shop   = $cart_itm["coupon_shop"];    // elementi ottenuti da $_SESSION["cart_products"], una riga alla volta
    $product_code  = $cart_itm["product_code"];
    $product_qty   = $cart_itm["product_qty"];
    $product_price = $cart_itm["product_price"];
    $prezzo_reale  = 0;                           // viene azzerato il prezzo perchè, se sql non restituisce un valore, la variabile é valorizzata

/*  non ho il database (ne mysql) sono costretto ad eliminare questa parte di codice commentandola

    $sql = "SELECT prezzo_reale FROM coupons_coupons WHERE coupon_id=$product_code AND coupon_shop=$coupon_shop";
    $result = $conn->query($sql);
    if ($result->num_rows > 0)
    {
        while($row = $result->fetch_assoc())
        {
            $prezzo_reale = $row['prezzo_reale'];
*/

            $prezzo_reale = $cart_itm["prezzo_reale"];  // valore assegnato come se provenisse dalla lettura del database

/*
        }
    }
*/

    echo "shop : " . $coupon_shop . " quantita : " . $product_qty . " prezzo : " . $prezzo_reale . "<br />";

    // con questo for si scorre il contenuto dell'array $coupon_shopS cercando al suo interno l'elemento $coupon_shop
    // partendo dall'indice 0 fino al numero di elementi presenti - 1, "count" conta gli elementi presenti
    // esempio da 0 a 4 sono 5 elementi

    $trovato = false;  // questa variabile indica se la ricerca ha avuto esito negativo / positivo

    for ($x=0; $x < count($coupon_shopS); $x++)
    {
        if($coupon_shop == $coupon_shopS[$x])
        {
            echo "TROVATO - AGGIORNATO shop : " . $coupon_shopS[$x] . "<br /><br />";

            $trovato = true;  // l'elemento é stato trovato quindi si somma il valore (+=)

            $prezzo_realeS[$x] += $prezzo_reale * $product_qty;

            break;  // con questa istruzione si interrompe il ciclo for, inutile farlo continuare avendo trovato e aggiornato l'elemento
        }
    }

    // uscendo dal ciclo si verifica che l'elemento non sia stato trovato, in questo caso lo si aggiunge nell'array $coupon_shopS
    // con il relativo valore

    if (!$trovato)
    {
        $s++;  // indice usato per aggiungere nuovi elementi all'array (vedi -1 all'inizio)

        echo "NON TROVATO - AGGIUNTO elemento : " . $s . "<br />";

        $coupon_shopS[$s]  = $coupon_shop;
        $prezzo_realeS[$s] = $prezzo_reale * $product_qty;

        echo "ELEMENTI : " . count($coupon_shopS) . "<br /><br />";
    }
}

$prezzo_realeT = 0;  // viene azzerata la variabile del totale generale

// con il ciclo for si scorre il contenuto dell' array $coupon_shopS
for ($x=0; $x < count($coupon_shopS); $x++)
{
    $prezzo_realeT += $prezzo_realeS[$x];  // sommando ciascun contributo nel totale generale

    echo "shop : " . $coupon_shopS[$x] . " prezzo : " . $prezzo_realeS[$x] . "<br />";  // e stampandolo
}
echo "<br />totale prezzo : " . $prezzo_realeT . "<br />";  // stampa del totale generale
?>
 

marino51

Utente Attivo
28 Feb 2013
3.001
173
63
Lombardia
potresti anche sostituire con il codice che segue, ho eliminato tutti i "loop" lasciando solo quello che serve per la visualizzazione dei risultati, codice più corto e più "bello"
PHP:
<?php
$coupon_shopS  = array();
$prezzo_realeS = array();

foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $coupon_shop   = $cart_itm["coupon_shop"];
    $product_code  = $cart_itm["product_code"];
    $product_qty   = $cart_itm["product_qty"];
    $product_price = $cart_itm["product_price"];
    $prezzo_reale  = 0;

    $sql = "SELECT prezzo_reale FROM coupons_coupons WHERE coupon_id=$product_code AND coupon_shop=$coupon_shop";
    $prezzo_reale = $conn->query($sql)->fetch_row()[0];

    if ( isset($coupon_shopS[$coupon_shop]) )
    {
        $prezzo_realeS[$coupon_shop] += $prezzo_reale * $product_qty;
    }
    else
    {
        $coupon_shopS[$coupon_shop]  = $coupon_shop;
        $prezzo_realeS[$coupon_shop] = $prezzo_reale * $product_qty;
    }
}

$prezzo_realeT = 0;

foreach ($coupon_shopS as $coupon_shop)
{
    $prezzo_realeT += $prezzo_realeS[$coupon_shop];

    echo "shop : " . $coupon_shopS[$coupon_shop] . " prezzo : " . $prezzo_realeS[$coupon_shop] . "<br />";
}
echo "<br />totale prezzo : " . $prezzo_realeT . "<br />";
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
Z Sommare prezzi da campi multiple Javascript 1
M Sommare i punteggi PHP 17
A sommare valori a video per lo stesso giorno jQuery 1
M [PHP] Sommare due campi calcolati PHP 3
C [PHP] Sommare o sottrarre a ZERO PHP 7
M [PHP] Sommare ore e minuti PHP 22
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
ste80 [PHP] sommare le ore PHP 24
L [PHP] Sommare campi e aggiornare tabella PHP 14
F Sommare valori di ogni periodo con SELECT PHP 7
C selezionare distinti id e sommare uguali PHP 1
clodiny come sommare dei record raggruppandoli per anno MySQL 33
A sommare valori in un array multidimensionale PHP 0
N Sommare due date PHP 4
G sommare valori più colonne MS Access 1
D Se non c'è il campo da sommare Javascript 2
B Sommare risultati db PHP 3
F [RISOLTO] Sommare data PHP 2
A Sommare campi stringa MYSQL PHP PHP 3
N Sommare iterazioni ciclo while PHP 5
Z Sommare i numeri con FOR Javascript 1
M sommare input mascherati Javascript 0
G Sommare i dati in una tabella PHP 35
Z Sommare i numeri PHP 2
L Datagrid selezionare e sommare un campo Visual Basic 0
G contare e sommare dopo JOIN Database 8
G Sommare caselle excel contrassegnate di un elenco Windows e Software 0
P come sommare dei numeri? PHP 2
M Come sommare elementi di un vettore in Visual basic Visual Basic 1
M temi premium Shopify da 180$ l'uno a prezzi bassissimi Altri Annunci 0
F [VENDO] guest post a partire da 30€ (anche pacchetti a prezzi convenienti) Vendere e Acquistare pubblicita' online 0
P [PHP] Calcolo prezzi camera in range di date diverse PHP 11
Cavalinho08 faccio crescere profili instagram a prezzi bassi Annunci servizi di Social Media Marketing 2
F [Vendo] Articolista con esperienza si offre per collaborazione. Prezzi bassi! Offerte e Richieste di Lavoro e/o Collaborazione 0
muvadi [Vendo] link su ottimo sito poker casinò - bassi prezzi Vendere e Acquistare pubblicita' online 0
TheGamer [offro] Creazione e miglioramento sito Wordpress, prezzi modici! Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO-VENDO] Vettorizzo la tua foto a prezzi incredibilmente bassi! Offerte e Richieste di Lavoro e/o Collaborazione 1
F [OFFRO - VENDO] Realizzazione SITI WEB statici responsive e non a prezzi imbattibili Offerte e Richieste di Lavoro e/o Collaborazione 0
M Regole Prezzi Sconti Magento 4
M Problema Regola sui prezzi PHP 0
J Realizziamo siti web wordpress/joomla a prezzi modici Offerte e Richieste di Lavoro e/o Collaborazione 0
G Mailing liste profilate a prezzi eccezionali Vendere e Acquistare pubblicita' online 0
F [Cerco Retribuito] Script comparatore prezzi Offerte e Richieste di Lavoro e/o Collaborazione 4
matteoraggi Confronto prezzi per transfer aeroportuali Presenta il tuo Sito 0
E [VENDO] Incrementi Fans Italiani. Massima Garanzia e Prezzi Incredibili Annunci servizi di Social Media Marketing 1
G Data base di liste email ottimi prezzi possibilità di fattura Vendere e Acquistare pubblicita' online 2
W Vendita visite WEB visite YOUTUBE prezzi bassissimi Annunci servizi di Social Media Marketing 0
A prezzi strani MySQL 0
W [VENDO] Fino ad 1.000.000 di visualizzazioni YouTube a prezzi bassissimi! Annunci servizi di Social Media Marketing 1
U [Vendo] Spazi pubblicitari blog moda, fashion e design ottimi prezzi. Vendere e Acquistare pubblicita' online 0

Discussioni simili