ho fatto circa un' oretta fa quello che tu stai cercando di fare.
premetto che le mie relazioni non sono su ID ma sui codici, e che query() è una mia funzione ...

detto questo il mio risultato lo pttengo a pieno

Codice PHP:
$end_var_testa=array();
$end_var_righe=array();
$var_testa_list=query("SELECT Codice,Descrizione FROM varianti_testa");
$x=0;
while (
$res=mysql_fetch_array($var_testa_list,MYSQL_ASSOC))
  {
  
//echo "  var_testa_list[$n] = \"{$res['Codice']}|{$res['Descrizione']}\";\n";
  
$end_var_testa[$x]="{$res['Codice']}|{$res['Descrizione']}";
  
$var_righe_list=query("SELECT Codice,Descrizione,Varianti_testa_Cod FROM varianti_righe WHERE Varianti_testa_Cod = '{$res['Codice']}' ORDER BY Ordine ASC;");
  
  
$y=0;
  while (
$sub_res=mysql_fetch_array($var_righe_list,MYSQL_ASSOC))
    {
    
$end_var_righe[$x][$y]="{$sub_res['Codice']}|{$sub_res['Descrizione']}";
    
$y++;
    }
  
mysql_free_result($var_righe_list);
  
$x++;
  }
  
mysql_free_result($var_testa_list); 
io racchiudo i due risultati in 2 array e dopo me li giostro!!! spero che questo possa essere un buono spunto per te