Pense no que seu código está fazendo. A cada loop, você está redefinindo o
$query
variável, de modo que quando você chegar ao final, o valor final de $query
será a última coisa que você verificou. Se você ainda quiser usar a mesma lógica de loop que você escreveu, o que provavelmente não é a maneira mais eficiente, então você terá que executar a consulta toda vez que dentro o loop, para que cada consulta que você escreve seja executada.
Mais precisamente, a confusão parece ser decorrente do fato de você ainda não ter descoberto a diferença entre atribuir um valor a uma variável e passar uma variável para uma função para execução.