Creedence 1 Denunciar post Postado Março 10, 2016 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
ESerra 744 Denunciar post Postado Março 10, 2016 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
Creedence 1 Denunciar post Postado Março 10, 2016 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
gabrieldarezzo 255 Denunciar post Postado Março 10, 2016 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
ESerra 744 Denunciar post Postado Março 10, 2016 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
Creedence 1 Denunciar post Postado Março 10, 2016 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-idresposta1-11-11-11-21-31-31-41-4etc ... 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
Creedence 1 Denunciar post Postado Março 13, 2016 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: 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