[PHP] Eliminare risultati duplicati da ciclo foreach ottenuti da una select php mysqli

maxnegri

Utente Attivo
12 Ott 2004
84
0
6
Salve a tutti,
ho le seguenti sessioni nel carrello dove sono presenti più prodotti di diverse aziende
PHP:
foreach ($_SESSION["cart_products"] as $cart_itm)
        {
        $product_code = $cart_itm["product_code"];

// vorrei prelevare l'id delle aziende e creo la query

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

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $couponshop=$row['coupon_shop'];
 
//STAMPO A VIDEO L'ID AZIENDA echo"SHOPID $couponshop";
}
}
}
Il problema che riscontro che quando ci sono più prodotti in sessione della stessa azienda ottengo l'id dell'azienda duplicato per quanti prodotti sono presenti in sessione.
Come posso prelevare solo l'id unico dell'azienda ?
 
Ultima modifica:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
3.939
294
83
@maxnegri
Dal regolamento generale del forum:
2.7 E' vietato aprire discussioni con titoli generici del tipo "Aiuto", "Help" o "Rispondete subito". Alle discussione deve essere assegnato un titolo che ne renda immediatamente comprensibile il contenuto utilizzando, ove possibile, la giusta terminologia tecnica. Così facendo si rende più facile agli altri utenti il compito di trovare immediatamente le discussioni a cui parteciapre.
Pertanto ti chiedo di leggere attentamente il regolamento generale del forum e quello della sezione dove posti!
Inoltre di chiedo di modificare il titolo della discussione in modo adeguato

In più:
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code.gif
quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box inserisci 2.png.JPG

Quindi ti prego ancora di leggere attentamente il regolamento generale del forum e quello di sezione dove posti.

Grazie infinite
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
3.939
294
83

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
visto che estrai il solo "coupon_shop" puoi inserire la clausola "distinct"
Codice:
SELECT DISTINCT coupon_shop FROM coupons_coupons WHERE ….
 

maxnegri

Utente Attivo
12 Ott 2004
84
0
6
Si, conosco la funzione DISTINCT ma non va perché la query si trova in un ciclo foreach e mi stampa comunque l'id coupon_shop per quanti prodotti sono stati aggiunti al carrello di una determinata azienda.
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
é evidente che non ho capito il problema e quindi non so cosa suggerirti,
attendi che qualche altra persona capisca meglio di me
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
se non hai ancora risolto, qualche nota sul tuo codice,

mi sembra corretto che,
leggendo prodotti diversi ( $_SESSION["cart_products"] as $cart_itm ),
a ciascun prodotto siano associati i suoi possibili fornitori ( coupon_shop )
tra cui scegliere per la possibile fornitura,
esponendo a video quelli specifici del prodotto

mi sembra errato che nel ciclo while estrai solo l'ultimo fornitore, perdendo tutti i precedenti, vedi,
$couponshop=$row['coupon_shop'];
che rimane valorizzato con l'ultimo elemento letto

la domanda che poni mi sembra incoerente con il codice postato
se vuoi che il codice operi in maniera diversa,
dovresti riformulare la domanda in modo da spiegare come deve funzionare l'intero codice, non la singola query


se invece hai già risolto, la curiosità mi spinge a chiederti di postare il codice modificato
 

maxnegri

Utente Attivo
12 Ott 2004
84
0
6
Ciao, no non ho risolto.
Nella schermata del carrello dove, se aggiunti, possono essere presenti prodotti di diverse aziende.
Di seguito il codice
PHP:
    foreach ($_SESSION["cart_products"] as $cart_itm)
        {

            $product_code = $cart_itm["product_code"];
}
Con il product_code visualizzo tutti i prodotti aggiunti al carrello.
Nella tabella dei prodotti ho il campo coupon_shop che fa riferimento all'azienda. Il mio problema adesso è quello di prelevare le aziende (coupon_shop) con il riferimento del product_code che sta nel (foreach) dei prodotti aggiunti e quando lo faccio i risultati sono duplicati per quanti prodotti sono stati aggiunti al carrello.

Es. ho tre prodotti di un'azienda ed uno di un'altra? Il risultato che visualizzo è:

SHOPID 1
SHOPID 1
SHOPID 1
SHOPID 3

Come faccio ad eliminare i risultati duplicati ed ottenere i singoli ID?

SHOPID 1
SHOPID 3

Spero di essermi spiegato bene. Grazie
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
potresti rendere $couponshop un'array
PHP:
$couponshop = array();
foreach ($_SESSION["cart_products"] as $cart_itm)
…...
$couponshop[]=$row['coupon_shop'];
al termine del ciclo rendere i valori nell'array univoci e visualizzarli

concordi ?
 

marino51

Utente Attivo
28 Feb 2013
2.599
132
63
Lombardia
puoi fare qualcosa di simile …
PHP:
$couponshopX = array();

foreach ($_SESSION["cart_products"] as $cart_itm)
{
    $product_code = $cart_itm["product_code"];

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

    if ($result->num_rows > 0)
    {
        while($row = $result->fetch_assoc())
        {
            $couponshopX[]=$row['coupon_shop'];
        }
    }
}
if (count($couponshopX) > 0)
{
    $couponshop = array_unique($couponshopX);

    //STAMPO A VIDEO L'ID AZIENDA echo"SHOPID $couponshop";
 

maxnegri

Utente Attivo
12 Ott 2004
84
0
6
Mi stampa solo SHOPID Array.
Ho fatto un test con 3 prodotti di un'azienda, uno di un'altra ed ancora uno di un'altra azienda.
Se poi stampo $couponshop[0] mi da solo il primo id. SHOPID 1
Forse devo fare un explode ?
 

maxnegri

Utente Attivo
12 Ott 2004
84
0
6
Si adesso funziona.
Ho fatto così:

PHP:
foreach ($couponshop as $couponshop)
{
    echo $couponshop , '<br>';
}
e mi stampa gli id unici delle aziende.
Credo sia corretto. Grazie mille!