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

Discussione: query DISTINCT

  1. #1
    Utente di HTML.it L'avatar di max103
    Registrato dal
    Dec 2005
    Messaggi
    317

    query DISTINCT

    id | nome | ordine
    ...........................................
    1 | pippo | 5
    2 | pippo | 0
    3 | minnie | 0
    4 | minnie | 4
    5 | gastone | 0
    6 | gastone | 0


    vorrei estrapolare DISTINCT nome dando la priorità della scelta ai record che hanno odine diverso da 0

    SELECT DISTINCT FROM tabellasiffatta WHERE ordine != 0 (e se un DISTINCT non ha nessun != 0 allora prendi il primo record che trovi, uno a caso va bene)

    come posso scrivere la query per far considerare nel DISTINCT
    prima tutti i record che hanno "ordine" != da 0 e solo dopo eventualmente quelli = 0 ?

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    prova con
    codice:
    SELECT DISTINCT nome
    FROM            tabella AS t
    WHERE           ordine = (
                            SELECT  max( ordine )
                            FROM    tabella
                            WHERE   nome = t.nome 
                            )
    ORDER BY ordine DESC
    funziona ma sicuramente c'è di meglio
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ti posto un'alternativa a quella di dottwatson.

    codice:
    select * from (
    select id,nome,max(ordine) as maggiore ,if(max(ordine)>0,0,1) as priorita from tab
    group by nome) as t
    order by priorita

  4. #4
    Tanto per capirla bene

    Codice PHP:
    if(max(ordine)>0,0,1
    Come si interpreta?

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da Samleo
    Tanto per capirla bene

    Codice PHP:
    if(max(ordine)>0,0,1
    Come si interpreta?
    Se il valore maggiore del campo ordine è maggiore di 0 assegno al campo 0, in caso contrario 1 e poi ordino su di esso. Quindi verranno visualizzati prima i record che hanno valore diverso da 0.

  6. #6
    Ah ok, quindi è come se fosse un operatore ternario questo if,

  7. #7
    Utente di HTML.it L'avatar di max103
    Registrato dal
    Dec 2005
    Messaggi
    317
    grazie per le risposte
    provo e vi faccio sapere come va

  8. #8
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    Originariamente inviato da Samleo
    Ah ok, quindi è come se fosse un operatore ternario questo if,
    infatti è così:

    if( condizione , se true, se false )
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Mi sono accorto che per come l'avevo concepita io la query era pure sbagliata.


    codice:
    select t2.* from (
    select tab.*,max(ordine) as maggiore
    from tab 
    group by nome) as t 
    left join tab as t2 on t.nome = t2.nome and t.maggiore = t2.ordine
    group by nome
    order by ordine desc
    Così mi sembra corretta anche se ho la sensazione che esista qualche alternativa meno ingarbugliata.

  10. #10
    Utente di HTML.it L'avatar di max103
    Registrato dal
    Dec 2005
    Messaggi
    317
    grande

    ci metterò un po' a studiarmela per bene, ma
    funziona perfettamente


    grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.