Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Criar view com condicional


lgdelai

Pergunta

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.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 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

Link para o comentário
Compartilhar em outros 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.
Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros 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.
Link para o comentário
Compartilhar em outros 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,
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...