Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Creedence

Loop while e avançar registro

Recommended Posts

Boa noite !


Eu preciso gerar uma rotina em php e gostaria de saber se é possivel.

No asp ela roda perfeitamente


Apos fazer um select, tenho que percorrer os registros, somar o campo enquanto ele for igual e imprimir total .

Vai pro proximo registro e faz o mesmo processo.



Não sei se isso funciona:


while (consulta=mysqli_fetch_array($resultado)){


/* aqui eu preciso jogar uma informação numa variavel

$codresposta=$consulta['id_resposta'];


/* E agora fazer novo loop enquanto o campo for igual a variavel */

while ($consulta['id_resposta'] = $codresposta) {

Atualiza variavel Total ...;

avançar registro;


}


imprime total;

}


Também não me ficou claro como ir pro proximo registro no php.

Tipo movenext ou algo parecido.


Obrigado,


Marcos

Compartilhar este post


Link para o post
Compartilhar em outros sites

O segundo while será um looping infinito, pois a condição dentro do while sempre será verdade, no caso de avançar o registro, o próprio PHP faz, isto no while, ele lê para o próximo ponteiro, assim se o while rodar novamente ele já pegará o ponteiro novo e já move para o próximo, assim sucessivamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite ESerra,

 

Em primeiro lugar obrigado pelo retorno.

Se o while avança o registro automático, o Segundo loop não seria infinito pois o campo id_resposta muda e consequentemente sairia desse segundo loop e retornaria pro primeiro, reiniciando.

Talvez eu não esteja sabendo fazer isso no php.

 

Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve!

Acabei de montar um exemplo.

Por que você não utiliza ele para tentar sanar seu problema?!

$sql = 'SELECT valor FROM `clientes` where id < ?';
 
/* Prepare statement */
$stmt = $mysqli->prepare($sql);
if($stmt === false) {
  trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $mysqli->errno . ' ' . $mysqli->error, E_USER_ERROR);
}
 
$id = '200';

$stmt->bind_param('i', $id);

/* Execute statement */
$stmt->execute();
 
/* Fetch result to array */
$res = $stmt->get_result();

$valor_total = 0;
while($row = $res->fetch_object()) {
	$valor_total += $row->valor;
}

echo 'Valor total é ' . $valor_total;

Outra sugestão minha seria utilizar o proprio sql, exemplo abaixo:

/*
create table valores(
	 id int(8) primary key auto_increment
	,vlr int(8) not null
)ENGINE=InnoDb;

insert into valores(vlr) values (50);
insert into valores(vlr) values (30);
insert into valores(vlr) values (20);
insert into valores(vlr) values (40);
*/

mysql> select sum(vlr) from valores;
/*
+----------+
| sum(vlr) |
+----------+
|      140 |
+----------+
*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o while avança o registro automático, o Segundo loop não seria infinito pois o campo id_resposta muda e consequentemente sairia desse segundo loop e retornaria pro primeiro, reiniciando.

Ele muda a cada iteração....

 

Veja o que você escreveu:

$codresposta=$consulta['id_resposta'];
      
      /* E agora fazer novo loop enquanto o campo for igual a variavel */
      while ($consulta['id_resposta'] = $codresposta) {

Você cria a variável $codresposta com o valor vindo de $consulta['id_resposta'], logo abaixo você diz enquanto $consulta['id_resposta'] for igual a $codresposta faça... só que isso vai ser verdadeiro para sempre nesse contexto, lembrando que a comparação se faz com "==" e não apenas "="

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra,

 

Com relação ao segundo While, talvez eu não tenha conseguido "expressar" no PHP.
Imaginando que minha query traga um resultado abaixo:

idpergunta-idresposta
1-1
1-1
1-1
1-2
1-3
1-3
1-4
1-4
etc ...

E eu preciso contar quantas respostas iguais (idresposta) pra cada pergunta

Entâo eu iniciaria um primeiro loop varrendo a query
jogaria numa variavel o campo idresposta (que no inicio seria 1)
Ai eu iniciaria o segundo loop enquanto o campo idresposta fosse igual minha variavel
Totaliza a resposta
Vai pro próximo registro e testa o while (No quarto registro sairia desse Loop pois o campo idresposta mudaria para 2, voltaria pro primeiro loop e mudaria a variavel.
}
}

 

Como eu informei na abertura do chamado, eu tenho essa rotina em asp e funciona. Como não tenho intimidade com o PHP, estou apanhando pra adaptar a rotina.

Mais uma vez, obrigado !

Marcos

Compartilhar este post


Link para o post
Compartilhar em outros sites
Boa noite !


Não sei se não fui claro na minha dúvida e queria complementá-la pois não consegui caminhar nessa rotina.

Parece que um "avançar registro" resolveria mas pelas várias consultas que fiz parece que avançar um registro numa query do php ( a não ser no mysql_fetch_array() ) é mais complicado.


Minha consulta sql retorna o conteudo abaixo:


query.png


Eu precisaria com esse conteudo gerar uma tela de resultado no formato abaixo (como exemplo):


Pergunta 1

Resposta 20 - 2 Vezes

Resposta 22 - 1 Vez


Pergunta 2

Resposta 24 - 2 vezes

Resposta 25 - 1 Vez


Pergunta 3

Resposta 28 - 3 vezes



Seria:


Enquanto não finalizar a query

pega codigo da pergunta e joga numa variavel

Imprime "Pergunta " + codigo pergunta


enquanto a campo pergunta for igual a variavel pergunta

pega codigo da resposta e joga numa variavel

cria uma variavel pra totalizar: variável total = 0


enquanto campo resposta for igual a variável resposta

total = total + 1

proximo registro

}

Imprime "Resposta " + codigo resposta + total

}

}


Não consegui expressar isso no PHP.


Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.