On the first iteration of the outer while() loop, the inner while() loop will run until it reaches the end of the result set (which apparently only contains 1 row, in your example) and then stop. On the next iteration of the outer while() loop, however, the inner while() loop will never run because it's already reached the end of the result set.
The two queries are completely separate resources, thus when you reach the end of the result set of the 'interestCategories' query, then you'll stay at the end unless you rewind the pointer back to the first row (e.g. by using [man]mysql_data_seek/man).
Instead of doing that, however, it would be a lot more efficient if you instead: 1) looped through the 'interestCategories' query and store all of the results in an array, and then 2) loop through that array inside your while() loop for the 'interestDataRow' query.