Cada vez que llama a mysql_fetch_array
extrae la siguiente fila de su consulta. Ese while
el bucle sigue devolviendo verdadero mientras mysql_fetch_array
todavía le queda algo por asignar a la variable $row2
. Una vez que se queda sin filas, no le queda nada para dar la variable y se devuelve falso.
ETA: Con respecto a lo último que mencionó, puede tener un incremento variable en cada iteración del ciclo como en su ejemplo, pero no es del todo necesario. También puede ver cuántas filas se han devuelto haciendo algo como $var = mysql_num_rows($data)
antes de tu while
bucle.