Ir para conteúdo
Entre para seguir isso  
theteo

View com IF

Recommended Posts

Boa tarde galera.

 

Construí uma View que está funcionando:

select `t`.`id_tramitacao` AS `id_tram`,`p`.`id_protocolo` AS `id_prot`,`p`.`protocolo` AS `num_prot`,`p`.`id_contrib` AS `id_contrib`,`p`.`numero_doc` AS `num_doc`,`c`.`fnome` AS `nome`,`c`.`lnome` AS `sobrenome`,`p`.`assunto` AS `assunto`,`t`.`id_setor_origem` AS `id_setor_rem`,`s1`.`sigla` AS `sigla_rem`,`serv1`.`fnome` AS `serv_rem`,`t`.`id_setor_destino` AS `id_setor_dest`,`s2`.`sigla` AS `sigla_dest`,`s2`.`id_estrutura` AS `id_estrutura`,`serv2`.`fnome` AS `serv_dest`,`t`.`data_tramitacao` AS `data` from (((((`radocs`.`tbl_prot_tramitacoes` `t` left join `radocs`.`tbl_setores` `s2` on((`t`.`id_setor_destino` = `s2`.`id_setor`))) left join `radocs`.`tbl_servidores` `serv2` on((`t`.`id_serv_recebe` = `serv2`.`id_servidor`))) join ((`radocs`.`tbl_protocolos` `p` left join `radocs`.`tbl_contribuintes` `c` on((`p`.`id_contrib` = `c`.`id_contrib`)))) join `radocs`.`tbl_servidores` `serv1`) join `radocs`.`tbl_setores` `s1`) where ((`t`.`id_protocolo` = `p`.`id_protocolo`) and (`t`.`id_serv` = `serv1`.`id_servidor`) and (`t`.`id_setor_origem` = `s1`.`id_setor`))

Acontece que, dependendo do que for encontrado id_estrutura ( `s2`.`id_estrutura` AS `id_estrutura` ) que pode ser NULL ou não, eu preciso buscar o nome do servidor em tabelas distintas.

 

Do jeito q tá o nome vem da tabela SERVIDORES, tbl_servidores que no código eu procuro em left join `radocs`.`tbl_servidores` `serv2` on((`t`.`id_serv_recebe` = `serv2`.`id_servidor`))

 

Caso o id_estrutura seja NOT NULL, ok, ta dando certo, mas se for NULL essa condição deve ser alterada para a tabela tbl_recebedores left join `radocs`.`tbl_recebedores` `rec` on((`t`.`id_serv_recebe` = `rec`.`id_recebedor`))

 

eu preciso de algo como:

 

if `id_estrutura` IS NOT NULL

 

left join `radocs`.`tbl_servidores` `serv2` on((`t`.`id_serv_recebe` = `serv2`.`id_servidor`))

 

ELSE

 

left join `radocs`.`tbl_recebedores` `rec` on((`t`.`id_serv_recebe` = `rec`.`id_recebedor`))

 

 

estou errando a sintaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites
left join



,IF(

`id_estrutura` IS NOT NULL,

`radocs`.`tbl_servidores` `serv2` on((`t`.`id_serv_recebe` = `serv2`.`id_servidor`)),

`radocs`.`tbl_prot_recebedores` `serv2` on((`t`.`id_serv_recebe` = `serv2`.`id_recebedor`))

)



Ainda não consegui, alguém poderia reproduzir um exemplo qualquer que use esse IF dentro de uma view ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem entrar no mérito do modela faça uma view que una as duas tabelas de "servidores" sua view usaria esta view.

 

A peformance poderia ser um problema todavia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, mas se eu fizer um view, eu ainda teria algo como SERVIDOR com ID 1 e RECEBEDOR com ID 1.

 

Na verdade, explicando mais ou menos, é pq quando envio documentos externos, os RECEBEDORES sao cadastrados em meu sistema na tabela "tbl_recebedores" e gravo o ID desse RECEBEDOR na tbl_tramitacoes.

 

Se o documento for enviado internamente, quem o receberá será um servidor já cadastrado e também gravo o ID desse SERVIDOR na tbl_tramitacoes.

 

Nao tem como usar esse tipo de condição em uma QUERY ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente algo do tipo

select * from <recebidos>

union all

select * form <enviados>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por Caio_Lourençon
      Olá estou desenvolvendo um projeto utilizando a extensão MySQLi, e nisso aproveitando para utilizar algumas funções orientada a objeto! Gostaria de tirar umas dúvidas em relação a listagem de dados, são duas perguntas:   1) Utilizar a função foreach() ao invés de um while() com a função fetch_array() dentro, tem uma listagem mais rápida ou mais lenta? Pois com ambas consigo trazer os dados, No momento estou utilizando a foreach por ser mais rápida de se digitar.
      2) Utilizo muitas listagens de tabelas diferentes na mesma página sempre chamando um novo SELECT, seria melhor criar uma função com um SELECT dentro para eu sempre reutiliza-lá ou não iria mudar muita coisa em questão de desempenho?
       
      Agradeço qualquer informação.
    • Por gersonab
      Procuro uma revenda de hospedagem confiável, ja adianto que uolhost e locaweb estão fora dos planos.
    • Por nohime
      Como resolver essas três tarefas sobre Comandos de Decisão IF do C#?
      2. Receber um número e verificar se ele esta na faixa de 0 à 9. Se sim, mostre uma mensagem afirmativa, caso contrário mostre uma mensagem indicando que o número não se encontra na faixa.
      6. Receber dois números e os apresente em ordem crescente. Utilize apenas a estrutura de decisão if, ou seja, sem o opcional else.
      9. Receber um ano e se este ano for bissexto exibir na tela “Ano Bissexto”, senão exibir na tela “Ano Não-Bissexto”. Um ano é bissexto se for divisível por 4, mas não por 100. Um ano também é bissexto se for divisível por 400.
    • Por Jefferson andre
      Ola, estou criando um contador de acessos diario mas nao funciona, a tabela tem o campo data no formato date e o campo contador int(10)
       
      A ideia eh verificar a data e se nao existir incluir na tabela, se existir adicionar ao contador
       
      Parece que o erro esta no formato da data, nem manualmente consigo incluir na tabela via localhost ou na hospedagem da google
       
      Agradeço qualquer ajuda
       
      <?php // fazendo uma conexão com o banco de dados include("conexao.php"); // grava a data atual em uma variavel date_default_timezone_set('America/Sao_Paulo'); $date = date('d-m-Y'); //$sql = "SELECT codigo FROM contador"; $resultado = $arquivo->query("SELECT data,contador FROM contador_diario WHERE data = '$date'"); if (mysqli_num_rows($resultado)== true){ // registro ja existe } else { // resultado nao encontrado entao inserir $sql = "INSERT INTO contador_diario ('data', 'contador') VALUES ('$date', '1')"; if ($arquivo->query($sql) == TRUE) { echo "Data cadastrada com sucesso"; } else { echo "Erro: " . $sql . "<br>" . $arquivo->error; } } // refaz a pesquisa para registrar o contador $resultado = $arquivo->query("SELECT data,contador FROM contador_diario WHERE data = '$date'"); // igualar a array a uma variavel $linha=mysqli_fetch_array($resultado); $cod_2 = $linha["contador"]+1; // lista a variavel //echo "<font face='Arial'><span class='style14'>$cod_2</span></font>"; $sql = "UPDATE contador_diario SET contador=$cod_2"; if ($arquivo->query($sql) === TRUE) { // echo "Alteração efetuada com sucesso"; } else { // echo "Erro alterando o contador de visitas diario" . mysqli_error($arquivo); } // fecha a conexao mysqli_close($arquivo); ?>  
    • Por gersonab
      Tenho este sql que funciona normal:
      <?php $idtor = (int)$_GET['id_tor']; $dia = $_GET['dia']; $sql3 = "SELECT * FROM cantos INNER JOIN campeonato ON id_camp = id_campeonato INNER JOIN torneio ON id_tor = id_torneio WHERE data = :dia AND id_torneio = :idtor ORDER BY cantosfim DESC, pontos DESC, cantos DESC"; $stmt = $pdo->prepare($sql3); $stmt->bindParam(':idtor', $idtor); $stmt->bindParam(':dia', $dia); $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> porém este outro não retorna nada, nem erro...
      <?php $idtor = (int)$_GET['id_tor']; $consul = "SELECT id_cantos, id_torneio, id_campeonato, SUM(cantosfim) AS cantfin, SUM(pontos) AS pontfin FROM cantos INNER JOIN campeonato ON id_camp = id_campeonato INNER JOIN torneio ON id_tor = id_torneio WHERE id_tor = :idtor ORDER BY pontfin DESC, cantfin DESC"; $stmt = $pdo->prepare($consul); $stmt->bindValue(':idtor', $idtor); $stmt->execute(); while ($lin = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> não consigo encontrar o erro.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.