Ir para conteúdo

POWERED BY:

Arquivado

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

Maulaz

Query com IF

Recommended Posts

É o seguinte tenho as seguintes tabalas.

 

Tabela Instituição

CREATE TABLE IF NOT EXISTS `tbcinstituicao` (
  `cdinstituicao` int(11) NOT NULL auto_increment,
  `nminstituicao` varchar(150) NOT NULL,
  `dtcadastro` timestamp NOT NULL default '0000-00-00 00:00:00',
  `usercadastro` int(11) default NULL,
  `dtupdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `userupdate` int(11) default NULL,
  `dtdelete` timestamp NULL default NULL,
  `userdelete` int(11) default NULL,
  PRIMARY KEY  (`cdinstituicao`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=254 ;

Tabela Formação/Candidato

CREATE TABLE IF NOT EXISTS `tbcformacao_candidato` (
  `cdformacao` int(11) NOT NULL,
  `cdusuario` int(11) NOT NULL,
  `cdinstituicao` varchar(11) NOT NULL,
  `ufinstituicao` varchar(11) NOT NULL,
  `inforinstituicao` varchar(255) default NULL,
  `nmcurso` varchar(200) default NULL,
  `informecurso` varchar(255) default NULL,
  `obscurso` varchar(255) default NULL,
  `dtiniciomes` char(2) NOT NULL,
  `dtfinalmes` char(4) NOT NULL,
  `dtinicioano` char(2) NOT NULL,
  `dtfinalano` char(4) NOT NULL,
  `concluiucurso` char(3) NOT NULL,
  `dtcadastro` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `dtalteracao` timestamp NOT NULL default '0000-00-00 00:00:00',
  `dtdelete` timestamp NULL default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

Eu prescizava exibir somente dois campos na query, seria o nminstituicao da primeira tabela, tbcinstituicao, e o campo nmcurso da segunda tabela, tbcformacao_candidato. Somente o campo nminstituicao/nmcurso desde que o cdinstituicao fosse igual nas duas tabelas. Até ai tranquilo.

 

O problema é que no meu formulario quando o usuário vai selecionar a instituição ou mesmo curso, caso os que estão listados ali não atenda ao mesmo, e o usuário selecionar no combo a opçao "outros", exibe um campo novo no formulario para ele está informando outra intituição ou mesmo curso.

 

Tentei fazer um if na query, mas está sempre dando erro.. rsrsrs dei uma googlada e não conseguir achar nada para resolver..

 

seria tipo assim, se o campo nminstituicao/nmcurso tiver o valor "Outros", ele não iria exibir essa informação e exibiria o que está cadastrado no campo inforinstituicao ou informecurso.

 

Se alguém puder me da uma ajuda ai nessa.. vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

conseguir resolver em partes o problema... pesquisei e conseguir fazer as querys separadas. So tive que alterar o campo cdinstituição e cadastrar no banco a instituição Outras de codigo 254.

 

SELECT IF( nmcurso = 'Outro', informecurso, nmcurso ) AS nmcurso
FROM tbcformacao_candidato
WHERE cdusuario = 211

SELECT IF( fc.cdinstituicao = 254, fc.inforinstituicao, i.nminstituicao ) AS nminstituicao
FROM tbcformacao_candidato AS fc, tbcinstituicao AS i
WHERE i.cdinstituicao = fc.cdinstituicao
AND cdusuario = 211

Agora como faço para juntar-las para que o resultado fosse:

 

nmcurso | nminstituicao

xxxx | xxxxx

xxxx | xxxxx

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT IF( nmcurso = 'Outro', informecurso, nmcurso ) AS nmcurso
FROM tbcformacao_candidato
WHERE cdusuario = 211
UNION ALL
SELECT IF( fc.cdinstituicao = 254, fc.inforinstituicao, i.nminstituicao ) AS nminstituicao
FROM tbcformacao_candidato AS fc, tbcinstituicao AS i
WHERE i.cdinstituicao = fc.cdinstituicao
AND cdusuario = 211

 

 

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas dessa forma usando UNION ALL, uniu tudo em um unico campo, o que estava prescizando era que ficasse em campos separados, a primeira query em um campo e a segunda em outro.

conforme exemplo:

 

nmcurso | nminstituicao

xxxxxxx | xxxxxxxxxxx

xxxxxxx | xxxxxxxxxxx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, coseguir fazer mais alguma coisa, mas mesmo assim num deu muinto certo, fiz o seguinte.

 

SELECT IF( nmcurso = 'Outro', informecurso, nmcurso ) AS nmcurso, '' as nminstituicao
FROM tbcformacao_candidato
WHERE cdusuario = 211
UNION
SELECT '' as nmcurso, IF( fc.cdinstituicao = 254, fc.inforinstituicao,i.nminstituicao ) AS nminstituicao
FROM tbcformacao_candidato AS fc, tbcinstituicao AS i
WHERE i.cdinstituicao = fc.cdinstituicao
AND cdusuario = 211

fiz conforme acima e o resultado ficou assim, quase que deu certo.

Imagem Postada

 

mas prescizava que ficasse assim:

nmcurso | nminstituicao

xxxxxxx | xxxxxxxxxxx

xxxxxxx | xxxxxxxxxxx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da pra você dar um exemplo das tabelas e da resposta q você quer, pq 'xxxx' nao ajuda mto pra saber o q você quer mostrar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom a query me resulta conforme imagem abaixo.

 

Imagem Postada

 

Como podem ver a query ta fufando, porém não exibe os dados sequenciais nas colunas, execulta uma coluna e quando termina a mesma e que na outra coluna começa os dados, queria que ficasse no mesmo alinhamento as duas colunas e não como está.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT IF( nmcurso = 'Outro', informecurso, nmcurso ) AS nmcurso, IF( fc.cdinstituicao = 254, fc.inforinstituicao,i.nminstituicao ) AS nminstituicao 
FROM tbcformacao_candidato AS fc, tbcinstituicao AS i
WHERE cdusuario = 211
AND i.cdinstituicao = fc.cdinstituicao

?

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.