Raphael,
Vamos supor que vc crie a seguinte query e ela retorne uma tabela com 3 registros
$query = "SELECT * FROM produtos";
$resultado = mysqli_query($conexao,$query);
$produto1 = mysqli_fetch_assoc($resultado);
$produto2 = mysqli_fetch_assoc($resultado);
$produto3 = mysqli_fetch_assoc($resultado);
Cada vez que você utiliza a função ela le a proxima linha da tabela que a sua consulta retornou.
Nesse caso eu disse que a query retornou apenas 3 registros entao não teriamos problema em escrever da maneira que fiz.
Mas e se a nossa consulta retornasse 1000 registros?
ou entao nós nao tivessemos a certeza de quantos registros a consulta iria retornar, certamente precisamos de uma maneira de automatizar isso.
Normalmente utilizamos o seguinte algoritmo
$query = "SELECT * FROM produtos";
$resultado = mysqli_query($conexao,$query);
while($produto = mysqli_fetch_assoc($resultado)){
//Regra do negócio
}
Dessa maneira, será executado o loop enquanto houverem registros na consulta, quando a função executar e nao encontrar mais nenhum registro ela simplesmente retorna um "false" e sai do loop