Ir para conteúdo


Foto

(Resolvido) Ler o próximo registro em uma query MySQL no PHP


4 respostas neste tópico

#1 Bootstrap

Bootstrap
  • Membros
  • 3 posts

Postado 12 janeiro 2012 - 03:08

Oi, pessoal,

Eu tenho esse código em PHP
CODE
$sql = "Select * from..."
$result = mysql_query($sql,$connection);
while ($row = mysql_fetch_array($result)) {
......
}


O que eu estou precisando é conseguir ler o próximo registro dentro do laço para fazer a comparação com o registro atual. Por exemplo:
CODE
while ($row = mysql_fetch_array($result)) {
......
if (ID DO PRÓXIMO RECORD != ID DO ATUAL RECORD) {
faça-alguma-coisa
}
}


O resultado que eu estou buscando é algo como:

CODE
Produto 1
Produto 1
<quebra de linha ou qualquer outra ação>
Produto 2
Produto 2
Produto 2
Produto 2
<quebra de linha ou qualquer outra ação>


Eu cheguei bem próximo da solução usando o código abaixo que encontrei na net, o único problema é que o último registro da query é sempre ignorado (não entra no while):
CODE
$current_row=mysql_fetch_array($result); //read $current_row
while ($next_row = mysql_fetch_array($result)) { //read $next_row
......
if ($current_row['id']!=$next_row['id']) { //compare it
.....
.....
}
$current_row=$next_row; //$next_row become current_row on next step
}


travei forte nesse problema e agradeço qualquer ajuda.

Editado por Bootstrap, 12 janeiro 2012 - 03:23 .


#2 ESerra

ESerra

    Não sou totalmente perfeito porque sou modesto.

  • Moderadores
  • 8.999 posts
  • Gender:Male
  • Location:São José do Rio Preto - SP

Postado 12 janeiro 2012 - 07:08

CODE
while ($next_row = mysql_fetch_array($result)) { //read $next_row
$atual = $next_row['id'];
if (isset($anterior) AND $anterior != $atual){  //compare it
.....
.....
}
$anterior=$atual; //$next_row become current_row on next step
}

www.profissionaisdaweb.com.br- www.edgarserra.com

"Eu posso até te ajudar, aliás, eu vou te ajudar! Eu quero te ajudar! Mas agora você tem que me ajudar a te ajudar."


#3 Bootstrap

Bootstrap
  • Membros
  • 3 posts

Postado 12 janeiro 2012 - 11:33

QUOTE(ESerra @ 12/01/2012 - 08:08) Visualizar Post
CODE
while ($next_row = mysql_fetch_array($result)) { //read $next_row
$atual = $next_row['id'];
if (isset($anterior) AND $anterior != $atual){  //compare it
.....
.....
}
$anterior=$atual; //$next_row become current_row on next step
}

ESerra, muito obrigado pela ajuda e atenção com meu problema.

Tentei implementar a sua solução no meu problema, mas fiquei em dúvida:

Minha necessidade é testar o registro atual com o próximo registro. Mas na sua implementação o teste está sendo feito entre o registro atual e o anterior. Não entendi como fazer essa parte funcionar.


#4 ESerra

ESerra

    Não sou totalmente perfeito porque sou modesto.

  • Moderadores
  • 8.999 posts
  • Gender:Male
  • Location:São José do Rio Preto - SP

Postado 12 janeiro 2012 - 12:14

E qual a diferença entre testar o atual com o próximo para ver se é diferente ou testar o atual com o anterior para também ver se é diferente?

www.profissionaisdaweb.com.br- www.edgarserra.com

"Eu posso até te ajudar, aliás, eu vou te ajudar! Eu quero te ajudar! Mas agora você tem que me ajudar a te ajudar."


#5 Bootstrap

Bootstrap
  • Membros
  • 3 posts

Postado 13 janeiro 2012 - 13:55

Oi, pessoal,

O usuário mikosiko do forum http://forums.devnetwork.net me passou o código que resolve perfeitamente o problema. Estou postando aqui para caso algum dia alguém precise.
CODE
// Example
  $heading_column = '<whatever is the name of your heading column>';
  $last_heading = null;

  while($row = your_fetch_assoc_statement){
        // detect a change in the heading value and output the new heading
        if($last_heading != $row[$heading_column]){
                // detect if it is not the first heading - close out the previous section
                if($last_heading != null){
                        // your code to close the previous section (table, div, etc)...
                        echo "close section<br />";
                }
                // output the new heading here...
                echo "new section title - {$row[$heading_column]}<br />";

                // save the new heading as the last_heading
                $last_heading = $row[$heading_column];
        }
        // output the actual data here...
        echo "data - {$row['your_data']}<br />";
  }
  // if there was any output - close out the last section
  if($last_heading != null){
        // your code to close the previous section (table, div, etc)...
        echo "close section<br ?>";
  }




Responder



  


0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos