Ir para conteúdo

POWERED BY:

Arquivado

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

talita.r.g

While..

Recommended Posts

Olá galera !

 

Estou desenvolvendo um sisteminha, que possui cadastro de livro, sendo que alguns livros contem até seis autores.

 

Então no cadastro, eu coloquei um select para cada autor. Não encontrei outra maneira de fazer que não duplicasse autores, pois tenho um cadastro só para autores e outro só para livros, pois o usuário não quer ficar digitando toda hora o nome do autor, enfim, no cadastro de livro, fiz um seleção no banco e trouxe todos os autores cadastrados. Para cadas livro tendo a opção de mais de um autor. O cadastro e alteração desses livros estão funcionando. O problema está na exibição de mais de um autor.

 

Tentei de dua maneiras:

1ª usando um "contador" :

<?php$query = "SELECT 			phpgw_estoque.id_estoque,			phpgw_estoque.id_autor2,			phpgw_estoque.id_autor3,			phpgw_estoque.id_autor4,			phpgw_estoque.id_autor5,			phpgw_estoque.id_autor6,			phpgw_autor.id_autor,			phpgw_autor.nome_autor					FROM			phpgw_estoque,			phpgw_autor		WHERE			(phpgw_estoque.id_autor2 = phpgw_autor.id_autor)		OR		   (phpgw_estoque.id_autor3 = phpgw_autor.id_autor)		  OR		   (phpgw_estoque.id_autor4 = phpgw_autor.id_autor)		OR		   (phpgw_estoque.id_autor5 = phpgw_autor.id_autor)   		OR		   (phpgw_estoque.id_autor6 = phpgw_autor.id_autor)		AND		   phpgw_estoque.id_estoque = '$id'		  ";$result_query = mysql_query($query);			?>  <tr> 	<td width="301" height="92" align="center"> 	<br><a href="exibir_autores.php?id=<?php echo $linhas['id_autor']; ?>" class="subtitulo_cinza_esc"><?php echo $linhas['nome_autor']; ?></a>	<?/*$i = 1;	while ($dados = mysql_fetch_array($result_query))			{								$id_autor[$i] = $dados['id_autor'];				$nome_autor[$i] = $dados['nome_autor'];												$i++;	}*/												?><br><a href="exibir_autores.php?id=<?php echo $id_autor[1]; ?>" class="subtitulo_cinza_esc"><?php echo $nome_autor[1]; ?></a> <br><a href="exibir_autores.php?id=<?php echo $id_autor[2]; ?>" class="subtitulo_cinza_esc"><?php echo $nome_autor[2]; ?></a> <br><a href="exibir_autores.php?id=<?php echo $id_autor[3]; ?>" class="subtitulo_cinza_esc"><?php echo $nome_autor[3]; ?></a> <br><a href="exibir_autores.php?id=<?php echo $id_autor[4]; ?>" class="subtitulo_cinza_esc"><?php echo $nome_autor[4]; ?></a> <br><a href="exibir_autores.php?id=<?php echo $id_autor[5]; ?>" class="subtitulo_cinza_esc"><?php echo $nome_autor[5]; ?></a>
2ª maneira, somente com while :

<?php$query = "SELECT 			phpgw_estoque.id_estoque,			phpgw_estoque.id_autor2,			phpgw_estoque.id_autor3,			phpgw_estoque.id_autor4,			phpgw_estoque.id_autor5,			phpgw_estoque.id_autor6,			phpgw_autor.id_autor,			phpgw_autor.nome_autor					FROM			phpgw_estoque,			phpgw_autor		WHERE			(phpgw_estoque.id_autor2 = phpgw_autor.id_autor)		OR		   (phpgw_estoque.id_autor3 = phpgw_autor.id_autor)		  OR		   (phpgw_estoque.id_autor4 = phpgw_autor.id_autor)		OR		   (phpgw_estoque.id_autor5 = phpgw_autor.id_autor)   		OR		   (phpgw_estoque.id_autor6 = phpgw_autor.id_autor)		AND		   phpgw_estoque.id_estoque = '$id'		  ";$result_query = mysql_query($query);			?><tr> 	<td width="301" height="92" align="center"> 	<br><a href="exibir_autores.php?id=<?php echo $linhas['id_autor']; ?>" class="subtitulo_cinza_esc"><?php echo $linhas['nome_autor']; ?></a><?	while ($dados = mysql_fetch_array($result_query))			{								$id_autor = $dados['id_autor'];				$nome_autor = $dados['nome_autor'];					?>		<br><a href="exibir_autores.php?id=<?php echo $id_autor; ?>" class="subtitulo_cinza_esc"><?php echo $nome_autor; ?></a> 		 <?	 }	 ?>
Eu acho que o problema está na consulta no banco...mas n encontrei nenhuma outra maneira de fazer...então deve ser problema de lógica, sei lá http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

Conto com a ajuda de vcs http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todos os autores são cadastrados no banco de dados. Mas na obra como exemplo, somente dois autores foram cadastrados para a obra, mas está exibindo 6 autores. Sendo que os campos que identificam os outros autores estao vazios. :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer fazer tudo via comandos SQL´s procure saber sobre JOIN, você está dando um select from duas tabelas, e não acho isso aconselhavel!

 

Acho melhor você usar um select para apenas 1 tabela, mas exibindo dados de duas tabelas, não sei se você me entendeu. Mas procure saber sobre JOIN q você irá entender.

 

Não vou te passar o codigo corretamente, pois não conheco bem o JOIN no bd MySQL, manjo bem no Firebird e não sei se é =

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

P.S.: A condição que você colocou no Where não está filtrando nada! Todos os dados de uma maneira vai bater como alguma das condições

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu caro...isso é um JOIN! http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

 

Eu preciso de uma consulta em duas tabelas, pois preciso comparar dados em tabelas diferentes...Meu comando não é SQL, é uma consulta no bd MYSQL através do PHP ;)

 

Mas msm assim, tem algo errado q n sei o q é http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

não minha cara, você não esta utilizando o JOIN corretamente: :D

 

http://www.sqlmagazine.com.br/Colunistas/P...os_join_PII.asp ;aqui você pode ter uma noção melhor!

 

ou sou eu que não não estou sabendo explicar bem! ;)

 

vamos lá, tente fazer um codigo parecido com esse

 

select * from phpgw_estoque inner left Outer Join phpgw_autor phpgw_autor on ((autor1 = idautor ) or (autor2 = idautor ) or (autor3 = idautor ) ... ) group by livro

 

se der algo errado me fala :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

 

Na verdade existem várias maneira de se fazer o JOIN, ou o INNER JOIN ( que foi o que você mostrou aqui), eu particularmente uso o JOIN assim : JOIN

 

Não há erro no JOIN ou no INNER JOIN, porque não apresenta erro de sintaxe SQL. O que acontece é um erro na query, mas acredito eu que na lógica mesmo, porque como pode exibir autores para um livro, sendo que esse autor não está cadastrado para esse livro?!?! Entendeu o problema? Mistérios da programação hehehe http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Testei a maneira que você sugeriu e deu erro de sintaxe http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...Na verdade existem várias maneira de se fazer o JOIN, ou o INNER JOIN ( que foi o que você mostrou aqui), eu particularmente uso o JOIN assim : JOINNão há erro no JOIN ou no INNER JOIN, porque não apresenta erro de sintaxe SQL. O que acontece é um erro na query, mas acredito eu que na lógica mesmo, porque como pode exibir autores para um livro, sendo que esse autor não está cadastrado para esse livro?!?! Entendeu o problema? Mistérios da programação hehehe http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Testei a maneira que você sugeriu e deu erro de sintaxe http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Testa com INNER JOIN, ou posta o codigo que você fez aqui! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que eu fiz eu postei...ta aí no começo do tópico...Vou testar com INNER JOIN , mas eu não tenho muita habilidade nisso, e tenho medo de errar :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...Na verdade existem várias maneira de se fazer o JOIN, ou o INNER JOIN ( que foi o que você mostrou aqui), eu particularmente uso o JOIN assim : JOINNão há erro no JOIN ou no INNER JOIN, porque não apresenta erro de sintaxe SQL. O que acontece é um erro na query, mas acredito eu que na lógica mesmo, porque como pode exibir autores para um livro, sendo que esse autor não está cadastrado para esse livro?!?! Entendeu o problema? Mistérios da programação hehehe http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Testei a maneira que você sugeriu e deu erro de sintaxe http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

O erro que deu nesso codigo que quero ver! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh entendi... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

 

SELECT * from phpgw_estoqueinner left Outer Join phpgw_autor phpgw_autor on ((id_autor = id_autor ) or (id_autor2 = id_autor ) or (id_autor3 = id_autor ))

Erro:

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'left Outer Join

phpgw_autor phpgw_autor on

((id_autor = id_autor ) or

(id_' at line 2 http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque INNER no lugar do LEFT OUTER <_< id_autor = id_autor , POR QUÊ?no Inner Join tem que referenciar tabela estoque x tabela Autore não pode comparar dois valores da mesma tabela, acredito q o erro seja esseselect * from phpgw_estoque inner Inner Join phpgw_autor phpgw_autor on ((phpgw_estoque.id_autor2 = phpgw_autor.id_autor ) or ... ) group by O_Livro_Dos_Autores

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá...

 

Como eu não conheço mto, alias qse nada de inner join, eu segui seu exemplo...mas deu erro!

Agora que você postou, fui procurar na net e resultou isso aqui:

 

SELECT					phpgw_estoque.id_autor,					phpgw_estoque.id_autor2,					phpgw_estoque.id_autor3,					phpgw_estoque.id_autor4,					phpgw_estoque.id_autor5,					phpgw_estoque.id_autor6,					phpgw_autor.id_autor,					phpgw_autor.nome_autor				FROM					phpgw_estoque			INNER JOIN					phpgw_autor				ON					(phpgw_estoque.id_autor = phpgw_autor.id_autor)

Sem erro de sintaxe, o erro msm é nos dados hehehe, pq na verdade tenho ctz que a lógica está errada :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

E DEU ERRO DE QUE?

]INNER JOIN

phpgw_autor phpgw_autor

 

e,

ON

(phpgw_estoque.id_autor = phpgw_autor.id_autor)

voce fazendo assim so vai listar os itens cujo phpgw_estoque.id_autor = phpgw_autor.id_autor

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.