Jump to content


Photo

Seleção Em Tres Tabelas


  • Faça o login para participar
4 replies to this topic

#1 Rafabap

Rafabap

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Não informado

Posted 21/09/2009, 10:13

olá, sou principiante no forum e PHP e estou começando a pegar o jeito, porem me bato... acabei de concluir um curso em php e mysql, e até conhecer o forum meu recurso eram revistas.

vamos lá:

tenho o bancos

produto
cod, nome, descrição ...

grade_tamalho
id_cor, descrição

grade_tamanho_produto
id, id_tamanho, produto

na tela onde altero os dados dos produtos, preciso trazer apenas as cores que não foram cadastradas.

se eu fizer da maneira abaixo, ele traz as cores, pois podem ter sido cadastradas na tabela grade_tamanho_produto para outros produtos, com outros códigos.
$sql = mysql_query("select * from grade_tamanho_produto, grade_tamanho where grade_tamanho.id_tamanho = grade_tamanho_produto.id_tamanho AND grade_tamanho_produto.cod_produto != ".$prod." group by grade_tamanho.descricao");
									
$linha = mysql_num_rows($sql);
while ($linha = mysql_fetch_array($sql))
{
$id_tamanho = $linha["id_tamanho"];
$descricao = $linha["descricao"];
echo "<input type='checkbox' name='tamanho[]' value='$id_tamanho' >$descricao "; 
}

tentei fazer primeiro selecionando as ids de cores que já foram cadastrados para o produto que esta sendo visualizado na tela como abaixo.
$sql = mysql_query("select * from grade_tamanho_produto where cod_produto = ".$prod." ");
					
$linha = mysql_num_rows($sql);
					
while ($linha = mysql_fetch_array($sql))
{
	$sql_tamanho = mysql_query("select * from grade_tamanho where id_tamanho != ".$linha["id_tamanho"]." ");
				   ... 
			   echo "<input type='checkbox' name='tamanho[]' value='$id_tamanho' >$descricao "; 
				 					
}
desta maneira ele até funciona, mas pelo while ele apresenta assim:
digamos que eu tenha cadastrado tamanho 3 e 5 para este produto.... ficara separado em dois:

1
2

4
5
6
...
1
2
3
4

6
7

como posso juntar estes resultados?

#2 MarcoviZ

MarcoviZ

    ubuntu for human being

  • Usuários
  • 1137 posts
  • Sexo:Não informado

Posted 21/09/2009, 10:40

teste assim:

SELECT * FROM grade_tamanho WHERE id_tamanho NOT IN (select id_tamanho from grade_tamanho_produto where cod_produto = ".$prod.")

ai não vai precisar fazer 2 consultas, só uma...

[]'s

Edição feita por: MarcoviZ, 21/09/2009, 10:41.

[]'s

#3 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 21/09/2009, 10:52

Bom dia amigos.

O jeito que o MarcoviZ falou vai funcionar mas tome cuidado com a versão do MySQL.
Versões um pouco mais antigas não aceitam o uso de subquerys.

Abraços
Mateus Antunes
MBASistemas

#4 Rafabap

Rafabap

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Não informado

Posted 21/09/2009, 11:04

Obrigado Marcoviz, Funcionou.
Já anotei na minha lista de soluções.

MBA, o provedor onde este site está hospedado está com versões recentes do mysql, desta maneria já posso utilizar? só teria problemas se eu tivesse o site em um provedor com versões anteriores, correto?

#5 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 23/09/2009, 13:45

Este suporte a subquery está disponível desde a versão 4.1 no MySQL. Deve ser bem difícil você encontrar alguém usando uma inferior hoje em dia.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq