beh senza sapere quello che vuoi fare e senza sapere la quantità di dati con cui hai a che fare posso buttarla li:

invece di fare delle query in cicli while innestati (filtrandole a monte) puoi effettuare le 3 query (senza filtro) e poi eseguire i while.

aumenterai il tempo che php ci mette a gestire il tutto però invece di 30 query (o più) ne avrai sempre 3.

es:
codice:
$query1 = xxx;
$query2 = xxx;
$query3 = xxx;

while ( $riga1 = xx )  {
   ...
   while ( $riga2 = yy ) {
      ...
      while ( $riga3 = zz ) {
         ...
         // costruisci il tuo array
         ...
      }
   }
}
non è una soluzione migliore anche perchè dipende molto dal numero di dati con cui avrai a che fare e dal tempo di esecuzione della singola query...bisogna valutare se ti conviene più allungare i tempi di php (xkè i while saranno su più dati visto che non ci sono filtri a monte) oppure fare una marea di query