Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Classifica

  1. #1
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746

    Classifica

    Ho le seguenti tabelle

    Tabella 'iscrizioni'
    id_iscrizioni
    username
    ...etc

    Tabella 'livelli'
    id_livello
    nome_livello
    ...etc

    Tabella 'livelli_iscrizioni'
    id_livelli_iscrizioni
    id_iscrizioni
    id_livello
    dataorario_inserimento


    in pratica ogni volta che un iscritto sblocca un livello, quest'ultimo
    viene inserito nella tabella 'livelli_iscrizioni' con data e ora dell'evento

    Alla fine dovrei fare la classifica degli iscritti indicando per ognuno i livelli
    raggiunti e a parità di livello tenere conto di chi lo ha raggiunto per primo
    grazie al campo 'dataorario_inserimento'


    E' un po' che ci penso ma non mi viene in testa un sistema pratico per
    risolvere, come potrei procedere?
    Errare humanum est, perseverare ovest

  2. #2
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Premesso che nella tabella c'è anche un campo 'posizione'

    ho partorito questa query

    codice:
    SELECT DISTINCT (i.id_iscrizione)
    FROM iscrizioni AS i
    INNER JOIN livelli_iscrizioni AS li
    ON i.id_iscrizione = li.id_iscrizione
    INNER JOIN livelli AS l
    ON l.id_livello = li.id_livello
    ORDER BY l.posizione DESC,li.dataorario_inserimento ASC
    Così funziona abbastanza ma c'è un errore, ossia finchè due iscritti sono allo stesso livello, quello che lo ha raggiunto prima risulta primo in classifica, grazie all' ORDER BY li.dataorario_inserimento ASC

    Purtroppo questo non funziona con la posizione dei livelli, ossia per un iscritto che ha raggiunto un livello in posizione maggiore, ORDER BY l.posizione DESC è come se non influisse sull'ordinamento di i.id_iscrizione

    Errare humanum est, perseverare ovest

  3. #3
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Ho pensato intanto di semplificare la cosa facendo una join su due tabelle anzichè tre.

    Quindi riassumendo ho queste tabelle:

    Tabella 'iscrizioni':
    id_iscrizione
    username

    Tabella 'livelli':
    id_livello
    nome_livello
    posizione

    Tabella 'livelli_iscrizioni':
    id_livelli_iscrizioni
    id_iscrizioni
    id_livello
    dataorario_inserimento

    In pratica gli iscritti raggiungono dei livelli e questi ultimi sono ordinati per 'posizione'.
    Quando un iscritto raggiunge un livello ciò viene inserito nella tabella 'livelli_iscrizioni' registrando la 'dataorario_inserimento'.

    Nella classifica a me serve far apparire per primo chi ha raggiunto il livello con la posizione più alta,
    a parità di livelli raggiunti dovrà apparire prima chi lo ha raggiunto per primo.

    Quindi ora sto provando questa query:
    codice:
    SELECT DISTINCT (li.id_iscrizione)
    FROM livelli_iscrizioni AS li
    INNER JOIN livelli AS l
    ON l.id_livello = li.id_livello
    ORDER BY l.posizione DESC,li.dataorario_inserimento ASC
    purtroppo ORDER BY l.posizione è come se non esistesse e considera solo l'ordinamento per dataorario_inserimento.

    Incomincia a venirmi il sospetto che con distinct fare un ordinamento così non va tanto bene
    Errare humanum est, perseverare ovest

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.