O que eu estou precisando é conseguir ler o próximo registro dentro do laço. Por exemplo:
while ($row = mysql_fetch_array($result)) {
......
if (ID DO PRÓXIMO RECORD != ID DO ATUAL RECORD) {
faça-alguma-coisa
}
}
O resultado que estou buscando é algo como:
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):
$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.
Cara, não manjo de PHP, mas tenho um palpite sobre isso… o problema deve ser com o $next_row[‘id’] que deve estar retornando nulo, já que quando você está no último registro não existe um próximo… Para ter certeza disso experimente testar isoladamente os valores desses dois caras … o $next_row[‘id’] e o $current_row[‘id’]
L
lsjunior
Crie uma variável para armazenar o identificador da linha anterior.
$id = -1; // Um valor que nunca vai existir no banco
while($row = mysql_fetch_array($result)) {
$currentId = $row["id"];
if($id == -1) {
// Primeiro registro lido
} else {
if($id != $currentId) {
// ID diferente, adicione a quebra
}
else {
// Mesmo ID, liste os dados
}
}
$id = $currentId;
}
Dependendo do caso vc pode armazenar toda a linha anterior numa variável.
$oldRow = null;
while($row = mysql_fetch_array($result)) {
if($oldRow == null) {
// Primeiro registro lido
} else {
if($oldRow["id"] != $row["id"]) {
// ID diferente, adicione a quebra
}
else {
// Mesmo ID, liste os dados
}
}
$oldRow = $row;
}
P
perdeu
posto em 2 forum essa duvida
B
Bootstrap
Pessoal (lsjunior e ADEMILTON) agradeço a atenção e ajuda.
Tentei implementar a solução do lsjunior no meu problema mas não obtive sucesso.
Pelo pouco que encontrei na net, parece que a solução passa pelo uso do ‘isset’… pelo que entendi, seria algo como na comparação entre o registro atual e o próximo:
if(isset($proximo)&&$proximo!=$atual)
Mas não consegui avançar muito além disso.
Será que o caminho é por ai mesmo?
M
mistico
AAAFFFF…
Isso daí é uma POG, padrão XGH.
O jeito certo é fazer com ORM!
B
Bootstrap
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.
// 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 headingif($last_heading!=$row[$heading_column]){// detect if it is not the first heading - close out the previous sectionif($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 sectionif($last_heading!=null){// your code to close the previous section (table, div, etc)...echo"close section<br ?>";}