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