perche' mai piero.mac? ne trovi a bizzeffe.....

any way.... potresti usare array_rand() dopo averlo reso unico. Order by e distinct prendono il primo record che trovano in grado di soddisfare la richiesta. Non dimenticare che sono funzioni di raggruppamento e non di selezione puntata su uno specifico record.

Si potrebbe creare una tabella temporanea popolata randomize e su questa fare la query in modo che il primo record trovato che soddisfa la richiesta di group by sia sempre diverso.

codice:
create temporary table temp
select * from tabella
where ... se hai delle condizioni per limitare i record estratti ....
order by rand();

-- ora fai la tua query usando la tabella temp al posto della tua originale

select *
from temp
left join categorie using(id_chiave)
group by categoria
sono due query. se provi con phpmyadmin devi mettere entrambe le query nella stessa finestra, poiche' ISSO e' uno script php e chiude la connessione ogni volta che termina la pagina e ti fumeresti la tabella temporanea.

Nello script fai due query a seguire.