così ti vanno uno sotto l'altro perchè stai facendo girare nel ciclo tutta la tabella.
ti direi di tenere quella tabella impostata così che va bene, ma inseriscila in un'altra tabella di un numero variabile di righe e 2 o 3 colonne (o più in base a quanti prodotti ci stanno per ogni riga, poniamo 3 per esempio)
poi fai così:
apri la tabella "di contenimento"
dentro il ciclo:
per il primo record che ti viene mostrato apri una tr
per ogni record apri una td dove ci metti la tabella che hai fatto tu che contiene i dati del prodotto, poi chiudi la td
ogni 3 record mostrati chiudi la tr e ne apri un'altra (in modo da mandare i prodotti a capo)
alla fine del ciclo (se i prodotti mostrati non finiscono l'ultima riga, ma sono magari 2) chiudi comunque la tr.
chiudi la tabella "di contenimento"