Ce que vous faites est valide - il ordonnera les résultats par ordre décroissant de a
mais randomisez l'ordre des liens.
Cependant, pour faire ce que vous voulez, vous devez d'abord utiliser une sous-requête pour obtenir les 100 derniers enregistrements, puis trier les résultats de cette sous-requête de manière aléatoire à l'aide d'une requête externe :
SELECT * FROM
(
SELECT * FROM table1
ORDER BY date DESC
LIMIT 100
) T1
ORDER BY RAND()