Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

select e inner join

Não consigo fazer a consulta ao mysql retornar o dados do id=4 do perfil, sendo que ao utilizar a query abaixo:

select p.*, ec.nome as estado_civil_nome , t.nome as titulo_nome, uo.nome as uf_oab_nome from perfil p inner join estado_civil ec on(p.estado_civil_id = ec.id) inner join titulo t on(p.titulo_id = t.id) inner join uf_oab uo on(p.uf_oab_id = uo.id) where p.id = 4

a resposta é: MySQL não retornou nenhum registo. (A consulta demorou 0,0000 segundos.)

e o id=4 exite no BD!!!! Embora esteja apenas populado com nome, email e senha e a ideia desta query é encontrar o id no BD, retornar o resultado e preencher o formulário para que o cliente possa completar os dados.

fiz um echo($query) e mostrou o seguinte resultado:

select p.*, ec.nome as estado_civil_nome , t.nome as titulo_nome, uo.nome as 
uf_oab_nome from perfil p inner join estado_civil ec on(p.estado_civil_id = 
ec.id) inner join titulo t on(p.titulo_id = t.id) inner join uf_oab uo 
on(p.uf_oab_id = uo.id) where p.id = 4

Se eu faço a query:

SELECT * FROM `perfil` WHERE 4

ele retorna o perfil id 4 corretamente.

as tabelas estado_civil , titulo e uf_oab estão no banco e populadas.

Alguém já teve esse tipo de problema e saberia como resolver ou onde procurar o erro? Obrigado

4 respostas

Sergio,

Em alguma das tabelas não possui a referencia, como está usando inner join não vai retornar nenhum resultado.

Como fazer para identificar onde está o problema, isolando cada join até encontrar o join que não retorna nada.

Teste os comandos abaixo, veja aquele que não retorna dados.

select * from perfil p 
inner join estado_civil ec on(p.estado_civil_id = ec.id)
where p.id = 4;

select * from perfil p 
inner join titulo t on(p.titulo_id = t.id) 
where p.id = 4;

select * from perfil p 
inner join uf_oab uo on(p.uf_oab_id = uo.id) 
where p.id = 4;

Muito obrigado pelo retorno Cleiton acho que já descobri o problema. Existem 3 inner join no meu sql. Se eu preencho o cadastro parcialmente e os campos estado civil, titulo e uf_oab não estão preenchidos ocorre o problema de não localizar o id. Quando eu preencho estes campos com um valor tudo funciona normalmente. Você saberia como resolver isso? Porque o cliente assim que se cadastra no sistema somente precisa do email e senha. Depois disso é que peço para completar o perfil com os dados faltantes em 3 etapas e estes campos fazem parte do outro formulário (etapa 2)

solução!

boa, esse tipo de coisa tende a acontecer.

Bem você vai precisar utilizar LEFT JOIN e RIGHT JOIN, leia sobre os dois para entender seu funcionamento.

No seu caso especifico será o left.

Valeu Cleiton, acertou na mosca! Alterei para LEFT JOIN e funcionou.

Muito obrigado