continua ad essere fumosa.... se hai tre record per topolino ma vuoi vedere solo la categoria (livelli), usa group by e non il distinct.

ma rivedrei anche l'impostazione della query usando JOIN.
codice:
select *
from associazioni as A
left join prodotti_main as P ON A.id_prodotto = P.id_prodotto
left join livelli as L ON L.id_livello = A.id_livello
where 
(P.titolo_{$_SESSION['public_vars']['lang']}_p LIKE '%{$ricerca}%' 
|| P.testo_1_p LIKE '%{$ricerca}%' 
|| P.facoltativo_1_p LIKE '%{$ricerca}%') 
group by P.campo, A.campo
$ordina
ma attenzione.... nel group by mettici i campi che ti servono e nell'ordine voluto....