Comunque no, le due query son ovviamente diverse, è la variabile che prende il result set che ha lo stesso nome ($qry), quindi suppongo si sovrascriva ogni volta rendendo necessario solo un free_result, quello finale... o è come un allocazione di memoria che va deallocata? E' questo il punto...
Va eseguita per 2 volte mysql_free_resulta.
Infatti quando la prima volta esegui:
$qry=mysql_query($sql);
In $qry ci sarà l'identificativo di una risorsa.
Quando di nuovo riesegui la stessa istruzione, in $qry ci sarà di nuovo l'identificativo di una risorsa; l'identificativo però è diverso dal precedente.
Basta che fai echo $sqry dopo le 2 istruzioni e te ne renderai conto.
Devi paragonare l'identificatore della risorsa ad un puntatore di memoria.
Quindi $qry = ... contiene un identificativo ke mi dice dove andare a prendere i dati.
Nel momento in cui tu usi
mysql_free_result($qry);
tu non liberi la memoria della variabile $qry in sé (per questo c'è il comando php unset), ma la memoria ke occupano i dati che hai preso e ke si trovano liddove l'identificativo della risorsa ti dice dove sono.
Ecco perché quando fai per la seconda volta
$qry=mysql_query($sql);
i nuovi dati ke sono presi dal DB vengo messi in una locazione di memoria diversi dalla chiamata precedente.
Ecco perché occorre per 2 volte fare il mysql_free_result($qry).
E comunque alla fine dello script php, automaticamente la memoria allocata per le varie query è deallocata. Quindi se ti dovessi dimenticare qualche mysql_free_result($qry) ci pensa PHP a farlo.
Spero di essere stato abbastanza chiaro.
Ciao.