Ir para conteúdo

POWERED BY:

Arquivado

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

Randolph Lima

While dentro de outro While?

Recommended Posts

Boa tarde pessoal,
Estou fazendo uma consulta no banco e está funcionando normalmente, porem existe um campo chamado "Pacotes" onde eu teria que listar todos os pacotes que o cliente possui, porem eu so estou conseguindo mostrar apenas 1 item sendo que alguns clientes possuem mais de 1. ex:

COD NOME PACOTES VALOR

1 JOAO HBO R$1,99

2 JOSE TELECINE R$2,99

 

Hoje eu estou conseguindo mostrar dessa forma, o cliente com o COD 2 por exemplo possui o pacote TELECINE e HBO, porem so estou conseguindo mostrar o TELECINE. A forma que estou tentando fazer e esta:

 

COD NOME PACOTES VALOR

1 JOAO HBO R$1,99

2 JOSE TELECINE,HBO R$5,00

 

Nesse caso eu teria que fazer um while dentro do outro ou existe alguma outra forma? Eu tentei fazer o while dentro de outro while porem eu não consigo o resultado esperado.

hoje meu while funciona assim:

// INICIO DO LAÇO DO RELATORIO
while (($row = oci_fetch_array($stid, OCI_BOTH))) {
       		echo "<tr>";	
                echo "<td>".@$row[0]."</td>";
                echo "<td>".@$row[1]."</td>";
                echo "<td>".@$row[2]."</td>";
                echo "<td>".@$row[3]."</td>";
                echo "<td>".@$row[4]."</td>";
                echo "<td>".@$row[5]."</td>";
                echo "<td>".@$row[8]."</td>";
                echo "<td>".@$row[9]."</td>";				
                echo "</tr>";
}

na row[9] que eu deveria mostrar todos os pacotes que o cliente possui (caso tenha mais de 1), porem ele so mostra 1, independente de quantos pacotes o cliente possui.

Poderiam me dar uma dica de como mostrar todos os pacotes dentro da consulta?

obrigado desde ja!

t+


Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo você pode montar um while e dentro deste, montar ou query usando o where para comparar um deterninado campo da sua segunda query com um campo da primeira. já fiz muito isso para menu com sub-menu, não é o correto mas funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá srnalim,
Não estou conseguindo construir dessa forma que você me passou, estava tentando criar algo bem simples tipo:

"se QuantidadeDeProdutos for > que 2 entao
mostra o total de produtos

e

mostra o nome de todos os produtos

senao

mostra os dados normalmente"

Acabei de sair do VisualG então ainda estou me acostumando com a linguagem PHP. Você acha que algo assim poderia dar certo? Obs: ainda estou tentando criar esse algoritmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, deixe-me ver se entendi:

Você tem uma tabela e dentro dela existe um campo chamado PACOTES que pode ter mais de 1 atribuído a uma mesma pessoa certo?

Bom, não sei como está montado seu DB ao certo, mas vejo duas alternativas:

1- A mais ''correta'' e sofisticada: Id, Nome, Pacote, Valor. Id2 EXEMPLO>

 

Id Nome Pacote Valor Id2

1 Luan HBO 19,90 7

2 Luan HBO 19,90 7

 

Esse Id 7 seria como um chave estrangeira lá da tabela de cadastro de clientes, na hora da query:

 

SELECT Pacote from Tabela WHERE Id2=$valor

 

Daí tu teria uma Array(obtida pelo mysql fetch array)

E poderia usar um while:

);
while ($linha = mysql_fetch_array($query)){
    $reg[] = $linha["Pacotes"];
	//Você ainda pode aproveitar esse while pra dar echo, adicionar em alguma elemento de form e etc...
}

 

OU

Você pode optar pela alternativa mais prática e mais comum também(que infringe um pouco o princípio de normatização SQL, mas é bem eficiente), que é mais ou menos o que você postou aí:

 

COD NOME PACOTES VALOR

1 JOAO HBO R$1,99

2 JOSE TELECINE,HBO R$5,00

 

 

Daí recebia normalmente com um mysql_fetch_array(desde que claro, você puxe isso direito, de modo a resultar numa array de um único índice), e quebra a string, se não me engano é o Explode(), usando como segundo parametro a virgula.

Daí só fazer o que quiser com o retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Eu consegui realizando uma segunda consulta dentro do while, depois eu guardei os pacotes dentro de uma variavel e mostrei ela, agora está tudo funcionando perfeitamente. Segue o codigo que me ajudou a concluir a consulta.

				// Variavel para guardas os pacotes
				$pacotes = "";
       		 	// Inicio do laço dos pacotes
            	while (($row2 = oci_fetch_array($stid2, OCI_BOTH))) {
					// Aqui eu vou guardar todos os pacotes do cliente dentro de uma variavel 	
                	$pacotes .= @$row2[2]."<BR>";					
				}
				
				
				echo "<td>".$pacotes."</td>";		
				unset($pacotes);


Obrigado e boa sorte a todos!

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.