Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Esercizio in SQL

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225

    Esercizio in SQL

    Ho il seguente schema:

    Dettaglio(id_scontrino, prodotto, quantita)

    id_scontrino | prodotto
    -----------------------
    scontr_1 | mortadella
    scontr_1 | salame
    scontr_1 | pecorino
    scontr_2 | salame
    scontr_2 | prosciutto
    scontr_2 | asiago

    devo trovare di tutti i prodotti, quelli che non sono presenti in ogni scontrino

    Se ad esempio i prodotti complessivi sono: mortadella, salame, pecorino, prosciutto, asiago
    allora, nello scontrino_1 non sono presenti: prosciutto e asiago...nello scontrino_2 non sono presenti che ne so: pecorino e mortadella...e così via.

    In sostanza dovrei far comparire una tabella di questo tipo:

    id_scontrino | prodotto
    -----------------------
    scontr_1 | prosciutto
    scontr_1 | asiago
    scontr_2 | pecorino
    scontr_2 | mortadella

    Qualcuno ha una soluzione?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225
    up

  3. #3
    Guarda... io ti ho creato uno scriptino per farlo però in maniera globale (ossia calcolo le differenze generali dell'array):
    Codice PHP:
            $query mysql_query("SELECT * FROM dettaglio");
            
    $valori mysql_query("SELECT DISTINCT prodotto FROM dettaglio");
            
            while(
    $doArray mysql_fetch_assoc($valori)) $values[] = $doArray['prodotto'];
            
            
    //Trovo i valori mancanti (con infiniti tipo di scontrino)
            
    while($assoc mysql_fetch_assoc($query)) {
                
    $return[$assoc['id_scontrino']][] = $assoc['prodotto'];        
            }
            
    //Elimino le chiavi
            
    sort($return);
            
            
    /*Ultilizzo una soluzione (non l'unica) forse astrusa...
            Un atra soluzione, forse più semplice sarebbe fare un ciclo in cui controllo tutti i valori, se già ci sono elimino, sennò conservo */
            
            
    foreach($return as $key => $value) {
                
    $string .= ',$return[' $key ']';
            }
            
    $string substr($string1);
            
    $exec '$abs = array_diff(' $string ');';
            echo 
    $exec;
            eval(
    $exec);
            
    print_r($abs);        
    ?> 
    L'output è
    codice:
    Array ( [0] => mortadella [2] => pecorino )
    Cristiano
    ---
    Originariamente inviato da rebelia : solo un nerd puo' pensare di tacchinare in un forum di informatica

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    225
    grazie 1000! Ma in sql solamente non c'è soluzione?

  5. #5
    mmm.... se ci fosse non la conosco...
    Cristiano
    ---
    Originariamente inviato da rebelia : solo un nerd puo' pensare di tacchinare in un forum di informatica

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    Re: Esercizio in SQL

    Originariamente inviato da Danelius
    Ho il seguente schema:

    Dettaglio(id_scontrino, prodotto, quantita)

    id_scontrino | prodotto
    -----------------------
    scontr_1 | mortadella
    scontr_1 | salame
    scontr_1 | pecorino
    scontr_2 | salame
    scontr_2 | prosciutto
    scontr_2 | asiago

    devo trovare di tutti i prodotti, quelli che non sono presenti in ogni scontrino

    Se ad esempio i prodotti complessivi sono: mortadella, salame, pecorino, prosciutto, asiago
    allora, nello scontrino_1 non sono presenti: prosciutto e asiago...nello scontrino_2 non sono presenti che ne so: pecorino e mortadella...e così via.

    In sostanza dovrei far comparire una tabella di questo tipo:

    id_scontrino | prodotto
    -----------------------
    scontr_1 | prosciutto
    scontr_1 | asiago
    scontr_2 | pecorino
    scontr_2 | mortadella

    Qualcuno ha una soluzione?
    Prova questa query:

    codice:
    select prodotto from dettaglio where prodotto not in(
    select prodotto from dettaglio 
    group by prodotto
    having count(prodotto) = (
    select count(distinct(id_scontrino)) from dettaglio)
    )
    Te la spiego rapidamente.

    1) select count(distinct(id_scontrino)) from dettaglio
    con questa query conti quanti sono i singoli scontrini

    2)select prodotto from dettaglio
    group by prodotto
    having count(prodotto) =

    con questa query selezioni i prodotti il cui conteggio è pari al valore ricavato nella precedente query, vale a dire quelli presenti in tutti gli scontrini.

    3) select prodotto from dettaglio where prodotto not in ...
    A questo punto, una volta che sai quali sono i prodotti presenti in tutti gli scontrini, basta che esegui una query in cui cerchi tutti i prodotti esclusi quelli presenti ovunque.

    Fammi sapere.

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    ora ho capito perchè non si trovano libri MySQL tanto facilmente in giro.. se li mangia tutti nicola75ss
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    A questo punto, una volta che sai quali sono i prodotti presenti in tutti gli scontrini, basta che esegui una query in cui cerchi tutti i prodotti esclusi quelli presenti ovunque.
    @nicola .... Mi pare che la richiesta fosse diversa....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da piero.mac
    @nicola .... Mi pare che la richiesta fosse diversa....
    Ciao Piero. Boh, io avevo capito così.

    P.S. Anche se sono più in ritardo di guidozz auguroni per il tuo compleanno.

  10. #10
    Originariamente inviato da nicola75ss
    Ciao Piero. Boh, io avevo capito così.

    P.S. Anche se sono più in ritardo di guidozz auguroni per il tuo compleanno.
    grazie...

    Mi pare che voglia conoscere, per ogni scontrino, quale/i prodotti NON sono stati acquistati da quel singolo scontrino e non la lista dei prodotti che non sono acquistati complessivamente da tutti gli scontrini.

    In pratica per ogni scontrino si dovrebbe fare il complessivo dei prodotti meno i prodotti acquistati. Almeno questo e' quanto ho capito.... userei degli array.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.