Ir para conteúdo

POWERED BY:

Arquivado

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

lgdelai

Criar view com condicional em Mysql

Recommended Posts

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?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perdão, não reparei no detalhe, sendo uma VIEW não ordene (quem usar ordena) ou ordene pela posição (order by 1)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei a ultima linha,
ORDER BY a.anun_responsavel ASC

mas o erro periste.


Mesmo eu não usando a coluna dpf_nome, o erro persiste

#1054 - Unknown column 'dpf_nome' in 'order clause'

Compartilhar este post


Link para o post
Compartilhar em outros sites


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 1 ASC --<<<< ordena pela 1ª coluna

Compartilhar este post


Link para o post
Compartilhar em outros sites
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,

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.