Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
lgdelai

(Resolvido) Criar view com condicional

Question

Olá a todos.

Desde já agradeço a quem puder ajudar de qualquer forma.

Preciso criar uma view que retorne em uma coluna específica, dados que podem vir
de duas tabelas diferentes baseado em uma condição.

Vejam:

-----------------------------
Tabela Anunciantes:
anun_id
anun_responsavel
-----------------------------
Tabela Contrato:
cont_id
cont_tipo
cont_anun_id
-----------------------------
Tabela Dados_pf
dpf_id
dpf_nome
dpf_anun_id
-----------------------------
Tabela Dados_pj
dpj_id
dpj_razao_social
dpf_anun_id
-----------------------------


View Anunciantes
anun_responsavel
cont_tipo
dpf_nome OU dpj_razao_social

Quero que na linha onde a o campo "cont_tipo" conter "pf" seja exibido o conteúdo "dpf_nome" da tabela "dados_pf"
e onde conter "pj" seja exibido o conteúdo "dpj_razao_social" da coluna "dados_pj"


-----------------------------

Usei este código:

SELECT anun_responsavel, anun_tipo, dpf_nome, dpj_razao_social
FROM anunciantes, dados_pf, dados_pj, contratos
WHERE anunciantes.anun_id=contratos.cont_anun_id
AND anunciantes.anun_id=dados_pj.dpj_anun_id
OR anunciantes.anun_id=dados_pf.dpf_anun_id
ORDER BY anun_responsavel ASC

Porém fiz um teste com tres registros, e não deu certo, aparecem muitos e com combinações erradas.
alguém pode me ajudar?

Tenho um print, mas não sei como postar imagens neste forum. alguém pode me ajudar com isto também?

Obrigado.

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Corrigindo as tabelas acima:

-----------------------------
Tabela Anunciantes:
anun_id
anun_responsavel
-----------------------------
Tabela Contrato:
cont_id
cont_tipo
cont_anun_id
-----------------------------
Tabela Dados_pf
dpf_id
dpf_nome
dpf_anun_id
-----------------------------
Tabela Dados_pj
dpj_id
dpj_razao_social
dpf_anun_id
-----------------------------


E O CÓDIGO

SELECT anun_responsavel, anun_tipo, dpf_nome, dpj_razao_social, cont_nome_negocio
FROM anunciantes, dados_pf, dados_pj, contratos
WHERE anunciantes.anun_id=contratos.cont_anun_id
AND anunciantes.anun_id=dados_pj.dpj_anun_id
OR anunciantes.anun_id=dados_pf.dpf_anun_id
ORDER BY anun_responsavel ASC

Share this post


Link to post
Share on other sites
  • 0
Bom a situação atual é a seguinte:
Este código aqui quando eu uso ele sem ser na view, ele funciona perfeitamente.
SELECT anun_responsavel, anun_tipo, IF(anun_tipo = 'pf', dpf_nome, dpj_razao_social) as anun_nome, cont_nome_negocio
FROM anunciantes
LEFT JOIN dados_pf ON dpf_anun_id = anun_id
LEFT JOIN dados_pj ON dpj_anun_id = anun_id
JOIN contratos ON cont_anun_id = anun_id
ORDER BY anun_responsavel ASC
Porém se eu criar a view com ele recebo o erro:
#1054 - Unknown column 'dpf_nome' in 'order clause'
DIz que a coluna não foi encontrada, Só que a coluna existe, pois como disse o código funciona.
Agora vejam só, quando eu removo o IF e o código fica asim:
SELECT anun_responsavel, anun_tipo, dpf_nome, dpj_razao_social, cont_nome_negocio
FROM anunciantes
LEFT JOIN dados_pf ON dpf_anun_id = anun_id
LEFT JOIN dados_pj ON dpj_anun_id = anun_id
JOIN contratos ON cont_anun_id = anun_id
ORDER BY anun_responsavel ASC
ele funciona na view, porém ele não junta as colunas dpf_nome e dpj_razao_social, ele exibe as duas colunas porém uma do lado da outra, e aque que não tem dados ficam nulas, gostaria delas unidas como consigo com o primeiro código, porém na view o código não funciona, não faz sentido isto.

Share this post


Link to post
Share on other sites
  • 0

Crie um select com UNION (ver manual do mysql para detalhes de como montar este select).

Depois crie a view com base no select que você criou.

Share this post


Link to post
Share on other sites
  • 0

Então Denis,

Este select:

SELECT anun_responsavel, anun_tipo, IF(anun_tipo = 'pf', dpf_nome, dpj_razao_social) as anun_nome, cont_nome_negocio
FROM anunciantes
LEFT JOIN dados_pf ON dpf_anun_id = anun_id
LEFT JOIN dados_pj ON dpj_anun_id = anun_id
JOIN contratos ON cont_anun_id = anun_id
Funciona perfeitamente, mas quando crio a view com ele, recebo o erro:

#1054 - Unknown column 'dpf_nome' in 'order clause'
E o interessante é que mesmo eu removendo a coluna "pdf_nome" do código o erro permanece o mesmo.

Uso o phpMyAdmin

Não sei mais o que fazer.

Share this post


Link to post
Share on other sites
  • 0
DESCOBRI.
O erro está relacionado ao nome que dei a view.
não pode conter "view" no início do nome como estava, "view_anunciantes"
Então testei outros nomes e funcionou, inclusive "anunciantes_view"
Agora minha dúvida é, será que tem algum relacionamento por eu ter conectado meu sistema do Dreamweaver com esta tabela chamada "view_anunciantes"?
Será que esta conexão fez alguma alteração no meu BD que causou o erro?
Vou conectar a tabela nova e ver no que dá.
OBRIGADO A TODOS,

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148096
    • Total Posts
      643335
×
×
  • Create New...