Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente bannato
    Registrato dal
    Mar 2011
    Messaggi
    389

    eliminare i doppioni di un campo, ma prelevarne anche altri

    mi spiego meglio

    per evitare i doppioni di un campo faccio cosi

    SELECT DISTINCT nome
    FROM alunni


    ma se io volessi eliminare si i doppioni del campo "nome" però prelevare anche gli altri campi
    come devo fare cosi?


    SELECT (DISTINCT nome),* FROM alunni



    grazie ciao

  2. #2
    Utente bannato
    Registrato dal
    Mar 2011
    Messaggi
    389
    niente?

  3. #3
    Il distinct si estende a tutta la select, Puoi usare il group by ma ti rendera' il primo che trova che soddisfi il raggruppamento

    codice:
    select *
    from alunni
    group by nome

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    Scusami, ma non mi sembra che abbia molto senso quello che vuoi fare...mi spiego meglio:

    immagina di avere una tabella così:
    codice:
    | NOME   | COGNOME | CLASSE  |
    |________|_________|_________|
    | Mario  | Rossi   |   5A    |
    | Franco | Verdi   |   5B    |
    | Mario  | Bianchi |   5C    |
    |________|_________|_________|
    facendo una query con distinct sul nome otterresti:

    codice:
    Mario
    Franco
    giusto?

    Ma se adesso tu volessi visualizzare tutti i dati della tabella, per la riga "Franco" visualizzeresti i valori giusti.
    Ma per la riga Mario? Che valori visualizzeresti? I valori di Mario Rossi o di Mario Bianchi?

    Capito quello che voglio dire?

    Quello che puoi fare invece è
    codice:
    SELECT DISTINCT * FROM TABELLA;
    che ti elimina tutte le righe uguali. Quindi nel caso di sopra ti fa vedere tutte e tre le righe, mentre in questo caso
    codice:
    | NOME   | COGNOME | CLASSE  |
    |________|_________|_________|
    | Mario  | Rossi   |   5A    |
    | Franco | Verdi   |   5B    |
    | Mario  | Rossi   |   5A    |
    |________|_________|_________|
    la riga 1 e la riga 3 le fa vedere una volta sola...
    Jekkil

  5. #5
    Utente bannato
    Registrato dal
    Mar 2011
    Messaggi
    389
    AVETE ENTRAMBI RAGIONE ma quello che voglio estrarre io è un pò diverso

    allora io ho una classifica parziale
    quindi salvo nel db il nome del torneo e il punteggio oltre all'id_utente ecc

    ora io voglio prelevare solo 1 torneo(per ogni torneo) colui che ha il punteggio piu' alto


    tipo ho questa struttura

    id_utente torneo punti
    5 --------1--------10
    7---------1-------5
    5---------2--------7
    7---------2--------11


    quello che vorrei prelevare è, del torneo 1 ,colui che ha piu' alto il punteggio, quindi l'id_utente 5 con punti 10
    e del torneo 2 l'utente 7 con punteggio 11


    il dinstinct mi farebbe proprio comodo, però non posso usarlo, perchè per prelevare altri dati come nome utente età ecc io faccio una cosa del genere

    select dinstinct torneo from sfida,user where sfida.id_user=user.id ORDER by sfida.punti


    però questa select è errata in quanto con dinstinct torneo il estraggo solo torneo....e non posso fare le altre cose che ho fatto qui where sfida.id_user=user.id ORDER by sfida.punti



    sto valutando group by però non l'ho mai usato....sto vedendo un po' in giro con scarsi risultati

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    ma se fai

    codice:
    SELECT * from tabella where torneo = 1 order by punti desc;
    e prendi la prima riga?

    o anche

    codice:
    SELECT *, MAX(punti) FROM tabella WHERE torneo = 1 group by torneo;
    della seconda non sono sicurissimo, perchè dovrei provarla
    Jekkil

  7. #7
    Utente bannato
    Registrato dal
    Mar 2011
    Messaggi
    389
    sto provando cosi


    ho questi dati nel db

    id_tab-torneo-id_user-punti
    1 0000000007 10 47
    2 0000000007 6 46
    3 0000000007 7 33
    4 0000000007 8 55
    5 0000000007 9 17
    6 000000008 8 100

    ora del torneo 7 vorrei prelevare quello col punteggio piu' alto cioè l'id_tab 4
    mentre del torneo 8 l'id_tab 6

    allora faccio cosi

    SELECT * FROM
    tabella_punti,utenti
    WHERE tabella_punti.id_utente=utenti.id GROUP BY torneo ORDER by punti DESC


    mi sembra che fa al caso mio, solo che

    mi estrae

    000000008 100
    0000000007 47


    però l'id 0000000007 non deve essere 47 il punteggio, ma 55, non capisco perchè mi estrae 47

  8. #8
    Utente bannato
    Registrato dal
    Mar 2011
    Messaggi
    389
    Originariamente inviato da Jekkil
    ma se fai

    codice:
    SELECT * from tabella where torneo = 1 order by punti desc;
    e prendi la prima riga?

    o anche

    codice:
    SELECT *, MAX(punti) FROM tabella WHERE torneo = 1 group by torneo;
    della seconda non sono sicurissimo, perchè dovrei provarla


    no non posso fare where torneo =1 perchè di tornei cè ne saranno tanti e mica posso scrivere centinaia di query
    ci vuole una query che prelevi il punteggio piu' alto per ogni torneo

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    allora non lo mettere...

    codice:
    SELECT torneo, idutente, MAX(punti)
    FROM tabella
    GROUP BY torneo;
    così non funziona?
    Jekkil

  10. #10
    Utente bannato
    Registrato dal
    Mar 2011
    Messaggi
    389
    si sta dando buoni risultati ma non proprio tutti

    faccio cosi è probabilmente sbaglio qualcosa

    Codice PHP:
     <?php




    $query_ultimi_win 
    mysql_query("SELECT MAX(punteggio)AS alias,room,id_utente,id FROM 
    giudizio_temporaneo,utenti 
    WHERE giudizio_temporaneo.id_utente=utenti.id GROUP BY room"
    ); 
    $lista_ultimi_win mysql_num_rows($query_ultimi_win);
    for(
    $x_ultimi_win=0;$x_ultimi_win<$lista_ultimi_win;$x_ultimi_win++){
    $tot_prova mysql_fetch_row($query_ultimi_win); 

     echo 
    "$tot_prova[0] $tot_prova[1] $tot_prova[2] $tot_prova[3] 
    "
    ;        

                 
                 }
                 
    ?>

    mi esce
    punti room id_utente id
    55 0000000007 10 10
    100 000000008 8 8



    invece del punteggio 55 l'id_utente è 8 e non 10...

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.