Ir para conteúdo

POWERED BY:

Arquivado

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

Eduardo_555

Problema cabeludo com join?

Recommended Posts

Olá bom dia

 

Estou com uma divida cruel aqui, pois antes exatamente oque eu fazia funcionava porem agora não sei porque não funciona maiskkk.

 

é o seguinte:

 

Tenho um tabela chamada animal que possui os seguintes campos tipo_id e sexo_id. o texto a ser exibido destes campos esta em outra tabela a tabela dados la eu tenho o seguinte layout id_tipo e o tipo, id_sexo e o sexo agora quero fazer uma relação entre as duas da seguinte maneira porem ele não resulta todos os dados e sim apenas aqueles que são iguais por exemplo

 

La em dados eu armazenei assim

 

id_tipo id_sexo tipo sexo

1 1 ave fêmea

2 2 mamíferos macho

 

quando eu fasso a minha query ele só me resulta quando o id_tipo for igual ao id_sexo.

 

a query que estou usando e a seguinte eu preciso que ela me resulte todos os dados da tabela só trocando o numero de identificação pelo nome .

SELECT tipo, sexo FROM animal JOIN dados ON animal.tipo_id = dados.id_tipo AND animal.sexo_id = dados.id_sexo

Como sera que posso resolver esse problema ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade o desenho de meu banco e assim

 

no animal tenho duas colunas um tipo_id que recebe um inteiro que identifica qual o tipo do animal

e tenho o sexo_id que identifica o sexo do animal.

 

depois la em dados e onde guardo esse digito identificador em id_tipo e id_sexo e tenho la a coluna tipo que e um var char onde sta escrito e ele que preciso exibir porem uso o id que são dois inteiros em comum para assim criar uma chave estrangeira entre estas tabelas

 

Era essa a sua duvida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, existe o registro ave fêmea e ave macho?

 

Desta forma não precisaria de uma PK composta de dois campos numéricos. Bastava colocar um único ID.

 

(Eu não tinha lido o trecho "La em dados eu armazenei assim", kkk)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria sido mais fácil e de melhor entendimento ter criado duas tabelas.

 

Você vai ter que fazer este tratamento como se fossem duas tabelas, primeiro com um JOIN para o tipo, depois um outro JOIN para o sexo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como 2 joins, pq se eu fasso dessa forma ele me acusa um erro, acredito que de sintaxe

select tipo, sexo from animal join dados
on animal.tipo_id = dados.id_tipo
join animal on animal.sexo_id = dados.id_sexo;

Seria desta forma que você fala, ou ainda continuo usando o AND

 

e so pra constar esta e so uma parte do problemaporque depois desta relação ainda voi ter que relacionar esta tabela com outra para resgatar mais dados.

 

Ajudem ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se ocorre erro, por favor, cole o erro também.

 

Não estou conseguindo entender, pode me dar mais informações. Toda e qualquer informação que possa achar importante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara Seguinte

 

Como você falou que deveria fazer 2 joins difierentes entao usei o and para unir um ao outro, Fis no php myadmin para ver melhor o erro para você coloquei esta query

selet tipo, sexo from animal join dados on animal.tipo_id = dados.id_tipo and join dados on animal.sexo_id = dados.id_sexo;

e esta dando este erro no php myadmin

 

Static analysis:

4 errors were found during analysis.

  1. Unexpected beginning of statement. (near "selet" at position 0)
  2. Unexpected beginning of statement. (near "tipo" at position 6)
  3. Unexpected beginning of statement. (near "sexo" at position 12)
  4. Unrecognized statement type. (near "from" at position 17)

Comando SQL:

selet tipo, sexo from animal join dados on animal.tipo_id = dados.id_tipo and join dados on animal.sexo_id = dados.id_sexo

Mensagens do MySQL : dot.gif

#1064 - 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 'selet tipo, sexo from animal join dados on animal.tipo_id = dados.id_tipo and jo' at line 1

 

Como resolvo isso ta me tirando do serio ja kkk.

 

Deve ser algo simples

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando for trabalhar com JOIN, utilize "apelidos" (ALIAS) para identificar as tabelas (principalmente quando for a mesma tabela - mesmo nome), e quais campos pertencem a qual tabela relacionada. Abaixo segue um exemplo.

SELECT d1.tipo, d2.sexo
FROM animal AS a
JOIN dados AS d1 # JOIN = INNER JOIN
  ON animal.tipo_id = dados.id_tipo
JOIN dados AS d2 # JOIN = INNER JOIN
  ON animal.sexo_id = dados.id_sexo;

Dá uma lida nisso aqui, uma dica do @Motta em um outro tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola Valeu pela dica real mete agora esta parte funcionou o problema é outro agora!!

 

Quando eu tento colocar a instrução where coluna tal = 100 ele me dis que é ambuguia porem nao existe outra coluna com este nome no banco e agora, sera que é por conta dos joins.

 

Fis assim para pegar os valorres.

SELECT d1.tipo, d2.sexo, preco, data, d3.nome FROM animal AS a 
JOIN dados AS d1 ON a.tipo_id = d1.id_tipo 
JOIN dados AS d2 ON a.sexo_id = d2.id_sexo 
Left outer join cadastro_produtor as d3 on a.produtor_id = d3.id

e agora estou tentando implementar este where para filtrar a busca por usuário, só para você entender eu armazenei em sessão um código que identifica meu usuário agora eu preciso filtrar a consulta pelo código do meu usuário estou tentando assim mas ele me retorna o erro.

SELECT d1.tipo, d2.sexo, peso, preco, numero_brinco, data, d3.nome FROM animal AS a 
JOIN dados AS d1 ON a.tipo_id = d1.id_tipo 
JOIN dados AS d2 ON a.sexo_id = d2.id_sexo 
Left outer join cadastro_produtor as d3 on a.produtor_id = d3.id where usuario_id = 100;

e o erro

 

SELECT d1.tipo, d2.sexo, peso, preco, numero_brinco, data, d3.nome FROM animal AS a JOIN dados AS d1 ON a.tipo_id = d1.id_tipo JOIN dados AS d2 ON a.sexo_id = d2.id_sexo Left outer join cadastro_produtor as d3 on a.produtor_id = d3.id where usuario_id = 100 LIMIT 0, 25

Mensagens do MySQL : dot.gif

#1052 - Column 'usuario_id' in where clause is ambiguous

 

Cara Você já ajudou bastante se tiver uma ideia de como resolver mais essa eu agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro ocorre porque este campo existe em mais de 1 tabela relacionada, quanto a isso blz, resolve colocando o alias antes do campo,assim como fez com a tabela de apelido d3 no campo id.

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.