Hi!
Die Sortierung bei den Nicht-Premium-Einträge ist noch immer falsch.
Wenn alles Probieren nicht hilft, muss man vielleicht doch mal ins Handbuch schauen. Und das sagt zu UNION und der Sortiererei im unteren Teil, dass die Ergebnisse beider Statements per Definition in unsortierter Reihenfolge aus dem UNION rauskommen. Das ist also die Ursache. Doch wie ist die Lösung? Das Handbuch sagt: Das Nicht-Vermischen der Teilergebnisse erreicht man, indem man eine Sortierspalte einfügt, nach der man dann global sortieren kann
(SELECT 1 AS sort1, ... WHERE premium)
UNION
(SELECT 2 AS sort1, ... WHERE nicht_premium)
ORDER BY sort1
Und die Teilergebnisse selbst? Da soll man eine zweite Sortierspalte einfügen. Und da muss man in deinem Fall das RAND() berücksichtigen.
(SELECT 1 AS sort1, RAND() AS sort2, ... WHERE premium)
UNION
(SELECT 2 AS sort1, s.time AS sort2, ... WHERE nicht_premium)
ORDER BY sort1, sort2 DESC
(Ob man den Zufall auf- oder absteigend sortiert, ist egal, Hauptsache der Timestamp kommt in der gewünschten Reihenfolge.)
Lo!