Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com While - loop - mysql


fabio.aurelio

Pergunta

Ola pessoal, uma colega pediu ajuda pra mim num codigo e não consegui ajuda-la, 

E o seguinte..



Ela tem um trecho em php assim:
 

$contador = 1;
while( $contador <= 10){
$sql    = "SELECT * FROM estoqueatual  WHERE id = '$contador')";
result = mysql_query($sql, $conexao);
..
}

..

Ou seja,  vai imprimir  enquanto os registro forem menor que 10..ate ai funciona

Problema: O campo ID, tem numeração assim:  1,2,4,7,8,9

Ou seja, ele não imprimi  3,5,6 ..etc logo, em vez dele imprimir os 10, ele imprimir os que estao com valores e o resto mostra em branco, quando ele deveria continuar imprimindo os outros, ate´ dar os 10 registros..(contados)

alguém sabe como contorno isso?

 

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
3 horas atrás, Beraldo disse:

Se a intenção é imprimir sempre 10 registros, retire o WHERE e use o LIMIT.

SELECT campos FROM tabela LIMIT 10;

E lembre-se de nunca colocar consultas dentro de loops. O desempenho cai muito. Veja: http://rberaldo.com.br/o-problema-do-n-mais-1/

então Beraldo,

Na verdade ele imprimir os 10, só que, como o campo ID não tem uma sequencia(1..2..3..4..5.), ele imprimir em branco quando passa pelos que não existe,

por exemplo:

ID PRODUTO VALOR

1    CAFÉ        3,00
3    ARROZ   4,00
5     FEIJAO  9,00

No caso acima, ele vai imprimir 
1 cafe..

2 em branco

3 arroz

4 em branco  .

 

Entendeu? Seria pra ele imprimir os 10 na sequencia...

Ou seja:

1    CAFÉ        3,00

3    ARROZ   4,00

5     FEIJAO  9,00

7     SAL

8    DOCE

...
...
..

Ate dar os 10 com dados...não sei se fui claro

Link para o comentário
Compartilhar em outros sites

  • 0

O problema é que você gera as linhas no loop e faz a consulta em seguida. No 2 e 4 o PHP exibe o contador, mas não vem resultados.

Como eu disse, basta um SELECT e um lop para percorrer os resultados. Assim todas as linhas terão dados

Mias detalhes sobre consultas aqui: http://rberaldo.com.br/pdo-mysql/

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Beraldo disse:

O problema é que você gera as linhas no loop e faz a consulta em seguida. No 2 e 4 o PHP exibe o contador, mas não vem resultados.

Como eu disse, basta um SELECT e um lop para percorrer os resultados. Assim todas as linhas terão dados

Mias detalhes sobre consultas aqui: http://rberaldo.com.br/pdo-mysql/

Beraldo,

Vi seus artigos sobre consulta(PDO, STATEMENT etc)
Mas o que esta me tirando o sono é este bendito loop do while, porque sempre quando chega nisso da problema :/

 

Link para o comentário
Compartilhar em outros sites

  • 0
41 minutos atrás, Beraldo disse:

O problema é o que eu expliquei no meu post anterior. Você faz um loop e consultas dentro desse loop. Você deve fazer UMA consulta e um loop que faz o fetch dessa consulta. Dessa forma não terá problemas

então, desenvolvi desta forma:

 

<?
$contador = 1;
while( $contador < 10){

$sql    = "SELECT distinct * FROM estoqueatual  WHERE id = '$contador'";
	$result = mysql_query($sql, $conexao);
	$row = mysql_fetch_assoc($result);
    ..
    $contador++;
}

?>
                        
                        

Ele ate contou os 10, mas puxou alguns registro em branco...

Editado por fabio.aurelio
Link para o comentário
Compartilhar em outros sites

  • 0
Em 30/07/2016 at 15:16, Beraldo disse:

Você não entendeu...

Quando eu digo **uma** consulta eu me refiro a apenas **uma** execução de consulta. Não execute consultas dentro de loops

O loop vai apenas fazer o fetch do retorno de **uma** consulta

Quando eu jogo a consulta pra fora do loop, ai todos os valores vem zerados, não apenas alguns 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Beraldo disse:

mostre como fez. Deve ter feito algo errado

Ficou assim:
 

<?
..
$contador = 1;
$sql    = "select DISTINCT * from estoqueatual  WHERE id = '$contador'";
while( $contador <= 10){
	$result = mysql_query($sql);
	..
	/*imprimi campos*/
	...
    $row = mysql_fetch_assoc($result);
	$contador++;

	}
	
                       ?>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Você até agora não entendeu. Esqueça o seu while atual. Esqueça $contador. Sua query *deve retornar 10 registros*. Uma consulta = 10 registros. 

select DISTINCT * from estoqueatual  WHERE id <= 10

ou seleciona aleatoriamente 10 registros:

select DISTINCT * from estoqueatual ORDER BY RAND() LIMIT 10;

Ou seja, uma consulta retornará 10 registros.

Depois o while faz o fetch dessa única consulta. Reveja todos os links que mandei. Há inúmeros exemplos lá

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Beraldo disse:

Você até agora não entendeu. Esqueça o seu while atual. Esqueça $contador. Sua query *deve retornar 10 registros*. Uma consulta = 10 registros. 

select DISTINCT * from estoqueatual  WHERE id <= 10

ou seleciona aleatoriamente 10 registros:

select DISTINCT * from estoqueatual ORDER BY RAND() LIMIT 10;

Ou seja, uma consulta retornará 10 registros.

Depois o while faz o fetch dessa única consulta. Reveja todos os links que mandei. Há inúmeros exemplos lá

Cara, obrigado pela força.

Mas desisto disso ai, toda hora é um erro diferente..

Abc,

 

 

 

 

Editado por fabio.aurelio
Link para o comentário
Compartilhar em outros sites

  • 0

Erros aparecem ao fazer algo errado. Basta localizar o erro e corrigi-lo. Descrevi os principais deles aqui: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

Tem que estudar o básico. Não adianta querer pegar código qualquer, mexer e esperar que funcione. Programação não é assim.

Estamos aqui para orientar. Se quiser continuar estudando, vamos passar o caminho pra você. Mas se preferir se entregar e desistir, tudo bem, é decisão sua.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...