La mia idea per evitare combinazioni doppie è quella di aggiungere alla tua tabella un ulteriore campo che nella mia query chiamerò valore. A ciascun record assegno valori 1,2,4,8,16,32 e così via.
La query diventerebbe:
codice:
select tb1.nome,tb2.nome,tb3.nome,
(tb1.valore+tb2.valore+tb3.valore) as pasto, (tb1.costo+tb2.costo+tb3.costo) as costo_totale
from `prodotto_alimentare` as tb1,`prodotto_alimentare` as tb2, `prodotto_alimentare` as tb3
where tb1.nome <> tb2.nome and tb2.nome <> tb3.nome and tb1.nome <> tb3.nome
group by pasto
order by costo_totale desc
Per limitare la ricerca alle combinazioni la cui somma di prezzi non supera un certo ammontare ti basta aggiungere la clausola having dopo il group by.