codice:
$sqlquery = "SELECT title, cat,
date_format(start_date,\"%d-%m-%Y\") as start,
date_format(end_date,\"%d-%m-%Y\") as end
FROM $table
WHERE end_date between '$dal' and '$al' + interval 1 day
ORDER BY $result end_date ";
se dai lo stesso nome del campo all'alias questo campo viene sovrascritto e l'order by ti fara' l'ordinamento sulla stringa resa da date_format invece che sul campo data.
il where non ne viene affetto perche' viene risolto prima dei nomi di campo e quindi fara' la sua funzione sul valore scritto in tabella, mentre l'order by lavora sui valori estratti.
Ovviamente i dati li troverai nei campi alias start e end.