Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138

    Uso corretto di DISTINCT

    Supponiamo io abbia una tabella che riporti :
    -il nome di un file
    -il proprietario
    -l'attivazione(attivato o meno 1 o 0)
    -la data di upload

    Ora supponiamo che io voglia selezionare gli ultimi 10 file inseriti riportando lo stato di attivazione, ma evitando i doppioni (un utente potrebbe inserire 10 file consevutivi e senza upload da parte di altri utenti per cui lo script riporterebbe 10 volte il suo nick)

    se eseguo una query di questo tipo non è perfetto:
    SELECT DISTINCT proprietario, attivazione FROM photo
    ORDER BY DATA DESC
    LIMIT 10

    poichè se ho utente A con file A attivato e utente A con file B disattivato lo visualizza comunque due volte perchè per lui sono distinti (UTENTE A - 1) e (UTENTE A - 0) come posso fare in modo di selezionare i proprietari distinti e poi in modo non distinct l'informazione attivazione in un unica query?

    Spero di essere stato chiaro, e che possiate aiutarmi!

  2. #2
    SELECT proprietario, attivazione FROM photo
    ORDER BY DATA DESC GROUP BY proprietario
    LIMIT 10

  3. #3
    Originariamente inviato da bubu77
    SELECT proprietario, attivazione FROM photo
    ORDER BY DATA DESC GROUP BY proprietario
    LIMIT 10

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

  4. #4
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138
    Ho provato la soluzione

    SELECT proprietario, attivazione
    FROM photo
    GROUP BY proprietario
    ORDER BY DATA DESC
    LIMIT 10

    funziona ma ho trovato l'errore che andrebbe corretto
    se ho una lista in ordine di data

    UTENTE A
    UTENTE B
    UTENTE C
    UTENTE A

    la query visualizza
    UTENTE B
    UTENTE C
    UTENTE A

    cioè visualizza la seconda occorrenza e non la prima, c'è modo di tenere invece la prima occorrenza in modo da selezionare
    UTENTE A
    UTENTE B
    UTENTE C ?

  5. #5
    faccina a parte... (per bubu errore "anche" di sintassi) ....

    non ho capito che vuoi fare. DISTINCT si estende a tutta la SELECT, non puoi avere moglie ubriaca e botte piena. Prova con UNION e fai le due query. Ma ripeto .... non ho capito dalla tua descrizione cosa vorresti ottenere

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

  6. #6
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138
    Esempio di Tabella

    PROPRIETARIO FILE attivazione DATA
    UTENTE A FILEA 0 oggi
    UTENTE C FILEB 1 ieri
    UTENTE B FILEC 1 ieri
    UTENTE A FILED 1 ieri


    Vorrei selezionare gli ultimi n utenti ad aver inserito un file e lo stato di attivzione, evitando i doppioni, se eseguo la

    SELECT proprietario, attivazione
    FROM foto
    GROUP BY proprietario
    ORDER BY DATA DESC
    LIMIT 10

    non vengono visualizzati doppioni ma invece di selezionare la prima occorrenza di UTENTE A seleziona la seconda cioè

    il risultato teorico è questo
    UTENTE C 1
    UTENTE B 1
    UTENTE A 1

    mentre io vorrei
    UTENTE A 0
    UTENTE C 1
    UTENTE B 1

  7. #7
    Originariamente inviato da zeroh
    Ho provato la soluzione

    SELECT proprietario, attivazione
    FROM photo
    GROUP BY proprietario
    ORDER BY DATA DESC
    LIMIT 10

    funziona ma ho trovato l'errore che andrebbe corretto
    se ho una lista in ordine di data

    UTENTE A
    UTENTE B
    UTENTE C
    UTENTE A

    la query visualizza
    UTENTE B
    UTENTE C
    UTENTE A

    cioè visualizza la seconda occorrenza e non la prima, c'è modo di tenere invece la prima occorrenza in modo da selezionare
    UTENTE A
    UTENTE B
    UTENTE C ?
    non cambiare le carte in tavola editando altrimenti obblighi a fare il saltimbanco....

    ancora non si capisce. ORDER BY data e pretendi un ordinamento per utente?

    il raggruppamento serve "a raggruppare" e non a scegliere soecifici record. ti verra' sempre proposto il record che si trova per primo in ordine fisico nella tabella. Se hai una versione recente di mysql si potrebbe fare con una subquery, ma non e' chiaro quello che chiedi.

    l'ultimo post chiede cose diverse dal primo.

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

  8. #8
    Utente di HTML.it L'avatar di zeroh
    Registrato dal
    Feb 2002
    Messaggi
    138
    Cavolo ammetto di aver fatto un pò di confusione ma chiedo sempre la stessa cosa , cioè di contare gli ultimi n utenti da una tabella composta come descritto sopra, selezionando proprietario e attivazione, oridinandoli per data e eliminando i doppioni.

  9. #9
    Originariamente inviato da zeroh
    Cavolo ammetto di aver fatto un pò di confusione ma chiedo sempre la stessa cosa , cioè di contare gli ultimi n utenti da una tabella composta come descritto sopra, selezionando proprietario e attivazione, oridinandoli per data e eliminando i doppioni.
    come gia' ti ho detto se hai una versione recente di mysql dovresti fare una subquery.

    esempio da adattare:

    codice:
    SELECT *
    FROM TABELLA
    WHERE data = (SELECT MAX(data) from TABELLA
                        GROUP BY proprietario)
    ORDER BY proprietario
    l'attivazione 0/1 e' una proprieta' che va scelta a priori oppure lasciata al caso se vuoi l'ultimo record inserito (max data).

    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.