Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 ??
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?
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)
sim pode existir ave femea ou macho porem o meu tipo nao é so ave pode ter outros entao preciso de 2 ids certo, um para os tipos e outro para o sexo dos animais.
estou certo?
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.
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
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.
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.
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
#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
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.
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
#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.
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.
Como separou dois tipos de dados em uma única tabela? Por favor, cole as informações relevantes de cada tabela.