Scusa, ma quello che chiedi realmente mi pareva talmente ovvio che ho pensato volessi il contrario.

Codice PHP:
<?php
// questa lista è paragonabile al risultato della query
$array         = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22);
// numero di colonne
$numerocolonne 3;
?>
<table border="1"><?php
 $numerocolonne 
3;
 
$indice        0;
 foreach(
$array as $value) {
  if (
$indice == 0) {?>
   <tr><?php
  
}
  
$indice++;?>
  <td><?php print $value;?></td><?php
  
if ($indice == $numerocolonne) {
   
$indice 0;?>
   </tr><?php
  
}
 }
 if (
$indice != 0) {?>
 </tr><?php
 
}?>
</table>
Dà :

1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
22