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

Discussione in 'PHP' iniziata da maxnegri, 22 Settembre 2018.

  1. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    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: 23 Settembre 2018
  2. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.768
    Mi Piace Ricevuti:
    283
    Punteggio:
    83
    Sesso:
    Maschio
    @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
     
  3. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Salve @Max 1 ,
    mi scuso per l'accaduto. Ho provveduto a modificare il titolo come richiesto. Grazie!
     
  4. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.768
    Mi Piace Ricevuti:
    283
    Punteggio:
    83
    Sesso:
    Maschio
    ok.gif ok.gif ok.gif
     
  5. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    visto che estrai il solo "coupon_shop" puoi inserire la clausola "distinct"
    Codice:
    SELECT DISTINCT coupon_shop FROM coupons_coupons WHERE ….
     
  6. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Ciao e grazie per la risposta.
    Ho già provato con distinti ma non va.
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
  8. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    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.
     
  9. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    é evidente che non ho capito il problema e quindi non so cosa suggerirti,
    attendi che qualche altra persona capisca meglio di me
     
  10. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    OK, grazie mille e buona giornata!
     
  11. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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
     
  12. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    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
     
  13. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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 ?
     
  14. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Non sono molto esperto in php potresti farmi un esempio? Grazie!
     
  15. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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";
     
  16. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Grazie mille! Provo e ti aggiorno.
     
  17. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    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 ?
     
  18. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.518
    Mi Piace Ricevuti:
    123
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    con un ciclo che lavora su $couponshop stampi tutto il suo contenuto
     
  19. maxnegri

    maxnegri Utente Attivo

    Registrato:
    12 Ottobre 2004
    Messaggi:
    84
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    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!
     
Sto caricando...

Condividi questa Pagina