Jump to content


Photo

Select 1 Tabela Principal E 2 Tabelas Filhas


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

#1 rowdriugol

rowdriugol

    Novato no fórum

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

Posted 14/09/2004, 07:57

Eae pessoal.
Preciso selecionar 1 tabela e 2 sub-tabelas.
A tabela principal chama-se pedidos, a 1ª sub-tabela chama-se pedidos_srbitrem (srbitrem é um modelo de implemento rodoviario) a 2ª é pedidos_sr(sr também é).

A tabela pedidos contém o principal de um pedido, as outras 2 sub-tabelas contém detalhes específicos dos 2 tipos de pedido.

Quando seleciono a tabela principal e UMA sub-tabela dá tudo certinho:

"SELECT *FROM pedidos, implementos, clientes, representantes,
WHERE implementos.id_imp=pedidos.id_imp AND clientes.id_cliente=pedidos.id_cliente AND representantes.id_rep=clientes.id_rep
AND pedidos.prev_dataentrega BETWEEN '$data1' AND '$data2'"

Agora quando eu seleciono as DUAS sub-tabelas, ele não mostra nada, não funciona:

"SELECT *FROM pedidos, implementos, clientes, representantes, pedidos_sr, pedidos_srbitrem
WHERE implementos.id_imp=pedidos.id_imp AND clientes.id_cliente=pedidos.id_cliente AND representantes.id_rep=clientes.id_rep
AND pedidos_sr.id_ped=pedidos.id_ped AND pedidos_srbitrem.id_ped=pedidos.id_ped AND pedidos.prev_dataentrega BETWEEN '$data1' AND '$data2'"

Alguem me dá uma luz?
Obrigado!

#2 Stormbringer

Stormbringer

    I'd love to stay with you all

  • Ex-Admins
  • 2927 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO
  • Interesses:Atualmente: pesquisa e desenvolvimento de web-games

Posted 14/09/2004, 08:30

sem conhecer sua aplicaçao, fica difícil dar um diagnóstico, mas verifique suas clausulas WHERE...

sabe o que vc pode fazer pra debugar? de um echo na query que o mysql vai executar, aih veja o que ele esta executando e compare manualmente a clausula where... aih vc vai ver exatamente onde ela está "negando" o que não deve (y)

๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑


#3 rowdriugol

rowdriugol

    Novato no fórum

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

Posted 14/09/2004, 08:39

o engraçado que é q se eu deixo somente uma tabela filha, tiro uma do select ele funciona na boa. Agora com as duas não rola.

#4 Stormbringer

Stormbringer

    I'd love to stay with you all

  • Ex-Admins
  • 2927 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO
  • Interesses:Atualmente: pesquisa e desenvolvimento de web-games

Posted 14/09/2004, 08:43

o engraçado que é q se eu deixo somente uma tabela filha, tiro uma do select ele funciona na boa. Agora com as duas não rola.

pois eh... faça o teste de debug que eu indiquei pra vc VER onde esta o erro...
ex.:

$tmpQuery = "SELECT *FROM pedidos, implementos, clientes, representantes,
WHERE implementos.id_imp=pedidos.id_imp AND clientes.id_cliente=pedidos.id_cliente AND representantes.id_rep=clientes.id_rep
AND pedidos.prev_dataentrega BETWEEN '$data1' AND '$data2'";


echo  $tmpQuery;

mysql_query($tmpQuery);


esse echo vai te colocar no output exatamente a query executada no mysql, e vc vai poder analizar qual das clausulas where esta te dando problema

๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑


#5 rowdriugol

rowdriugol

    Novato no fórum

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

Posted 14/09/2004, 09:30

Eu fiz isso storm. O que pode estar acontecendo é que na consulta ele relaciona-se ou com 1 tabela filha ou com outra, e nisso ele não retorna nada.
Pelo menos foi isso que me disseram em outro fórum;

A estrutura das minhas tabelas são basicamente assim:

pedidos //tabela principal
id_ped //identificação do pedido
npedido //número do pedido
data_ped //data do pedido

pedidos_srbitrem //tabela filha
id_ped //id que é relacionado com o id_ped da tabela principal
assoalho //e demais detalhes do pedido

pedidos_sr
id_ped //também relaciona-se com a tabela principal
... e demais campos que são detalhes do pedido


Então na tabela principal existem todos os registros
1 2 3 4 5 6 7

Na tabela filha pedidos_srbitrem existem somente alguns
2 3 5 7

Na outra tabela filha pedidos_sr existem outros
1 2 4

Ouvi falar que existe uma palavra-chave no sql que faz que quando não haja relacionamento ele retorna um NULL no campo
por exemplo:

tabela clientes
cod nome cod_estado
1 Júnior NULL
2 Antonio 3

tabela estados
cod_estado nome_estado
1 Bahia
2 Ceará

A consulta "select * from clientes, estados where clientes.cod_estado = estados.cod_estado" não retorna registro nenhum.

Essa palavra chave faria retornar:
cod nome cod_estado nome_estado
1 Júnior NULL NULL
2 Antonio 3 NULL

#6 Marcão

Marcão

    Marcãaaaaaaaao

  • Usuários
  • 1754 posts
  • Sexo:Não informado
  • Interesses:Faixa preta de Muay-Thay<br>Faixa Roxa de Jiu-Jitsu<br>:D<br>Um dia eu chego lá

Posted 14/09/2004, 09:48

vc ta testando isso via php ou direto no banco??
se estiver via php,faz assim:
mysql_query("SELECT *FROM pedidos, implementos, clientes, representantes,
WHERE implementos.id_imp=pedidos.id_imp AND clientes.id_cliente=pedidos.id_cliente AND representantes.id_rep=clientes.id_rep
AND pedidos.prev_dataentrega BETWEEN '$data1' AND '$data2'") or die(mysql_error());

Marcão -=- PHP é coisa de MESTRE e falo mais nada -=-
Minha Foto
"Não temas,segue adiante,não olhes para trás!!
Segura na mão de
Deus e vai.."

#7 rowdriugol

rowdriugol

    Novato no fórum

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

Posted 14/09/2004, 09:58

tirando a virgula ali depois do "representantes," ocorre tudo certinho.

mysql_query("SELECT *FROM pedidos, implementos, clientes, representantes, pedidos_srbitrem, pedidos_sr
WHERE implementos.id_imp=pedidos.id_imp AND clientes.id_cliente=pedidos.id_cliente AND representantes.id_rep=clientes.id_rep
AND pedidos_srbitrem.id_ped=pedidos.id_ped AND pedidos_sr.id_ped=.id_ped
AND pedidos.prev_dataentrega BETWEEN '$data1' AND '$data2'") or die(mysql_error());

agora isso também naum retorna nenhum erro, e também nenhum resultado ehehhe

#8 Marcão

Marcão

    Marcãaaaaaaaao

  • Usuários
  • 1754 posts
  • Sexo:Não informado
  • Interesses:Faixa preta de Muay-Thay<br>Faixa Roxa de Jiu-Jitsu<br>:D<br>Um dia eu chego lá

Posted 14/09/2004, 10:02

tirando a virgula ali depois do "representantes," ocorre tudo certinho.
não é para ter virgula mesmo
mas ja deu certo ae??
Marcão -=- PHP é coisa de MESTRE e falo mais nada -=-
Minha Foto
"Não temas,segue adiante,não olhes para trás!!
Segura na mão de
Deus e vai.."

#9 rowdriugol

rowdriugol

    Novato no fórum

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

Posted 14/09/2004, 10:05

não funciona, não dá erro nenhum

mysql_query("SELECT *FROM pedidos, implementos, clientes, representantes, pedidos_srbitrem, pedidos_sr
WHERE implementos.id_imp=pedidos.id_imp AND clientes.id_cliente=pedidos.id_cliente AND representantes.id_rep=clientes.id_rep
AND pedidos_srbitrem.id_ped=pedidos.id_ped AND pedidos_sr.id_ped=.id_ped
AND pedidos.prev_dataentrega BETWEEN '$data1' AND '$data2'") or die(mysql_error());

#10 Marcão

Marcão

    Marcãaaaaaaaao

  • Usuários
  • 1754 posts
  • Sexo:Não informado
  • Interesses:Faixa preta de Muay-Thay<br>Faixa Roxa de Jiu-Jitsu<br>:D<br>Um dia eu chego lá

Posted 14/09/2004, 10:12

vc esta mandando escrever na tela??
se sim,faz o seguinte:
manda a estrutura de sua tabela com alguns campos preenchidos!!
ae fica mais facil de testar
não iremos tentar descobrir o erro

Edição feita por: Marcão, 14/09/2004, 10:28.

Marcão -=- PHP é coisa de MESTRE e falo mais nada -=-
Minha Foto
"Não temas,segue adiante,não olhes para trás!!
Segura na mão de
Deus e vai.."

#11 rowdriugol

rowdriugol

    Novato no fórum

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

Posted 14/09/2004, 14:06

como assim?
to mandando listar na tela
mas naum aparece nada




1 user(s) are reading this topic

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

IPB Skin By Virteq