Mah, il tuo script si va a prendere tutti i prodotti aggregati insieme; di conseguenza è rognoso starli a separare.

Dovresti fare una explode su 'produce' e ciclare l'array risultante con un altro while, in modo da discriminare, ad ogni iterazione, un prodotto; metti quindi nel while quello che vuoi per ogni singolo prodotto.

Ci vuole sì il while che scorre le aziende, ma poi fai la explode sui prodotti e fai un while anche su quelli e stampando separatamente i link (a quel punto nell'array hai i prodotti separati).

Oppure cercherei un modo più furbo di scrivere la query, in modo che restituisca già la lista dei prodotti (magari ordinati per azienda). Li scorri tutti, controllando ogni volta l'azienda del prodotto, e quando cambia scrivi il nome e il link della nuova azienda.
Ma mi pare di capire che non c'è una tabella di associazione tra prodotti e aziende.... ma i prodotti sono scritti direttamente nel campo 'produce' dell'azienda, separati da virgola.

Con quella struttura del DB mi sa che ti trovi un monte di rogne... sono odiose le situazioni in cui ti devi lavorare sul codice di un incompetente...