Naja. Ich hab grad ein wenig mit Groub by rumgespielt. Leider sortiert ein "order by rand()" lediglich nach Kategorie - Leider nicht nach was anderem.
Deshalb bleibt dir wohl nichts anderes übrig, als zuerst die Kategorieren auszulesen, und dann Kategorie für Kategorie einen zufälligen Eintrag. Es sei denn, hier kennt jemand n' Trick, der das ganze unnötig macht
$res = mysql_query('SELECT *
FROM `zdsmk`
GROUP BY `Kategorie`
LIMIT 0 , 30';
while($row = mysql_fetch_assoc($res)) {
$res2 = mysql_query('SELECT * FROM `zdsmk` WHERE `Kategorie` = "'.$row['Kategorie'].'" ORDER BY rand('.mt_rand().'';
}
(@BSN, dein Query ist fehlerhaft.)