Ir para conteúdo

POWERED BY:

Arquivado

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

Henrique Fleury

SELECT de id diferente em campos iguais da mesma tabela

Recommended Posts

Pessoal tudo bem?

Estou precisando fazer um SELECT onde na tabela tem 2 usuarios o de abertura do chamado e o tecnico do chamado e no final eu quero puxar o nome dos dois que vem da mesma tabela a tb_usuario

Porem como eu faco para puxar e saber qual e o nome do usuario tecnico e qual o nome do usuario de abertura?

public function buscarCmdFimEmail($Chamado){
	$sql = " SELECT ch.id_chamado, at.nom_atendimento, pv.nom_pdv, pv.id_rede_pdv, rd.nom_rede, pb.nom_problema, pt.num_patrimonio, us.nom_usuario[color="#FF0000"][b](esse e o campo que tenho que pegar 2 vezes da mesma tabela)[/b][/color], ch.des_problema, ch.des_solucao, ch.dta_cadastro_chamado, tm.tep_atendimento "
	." FROM tb_chamado AS ch "
	." LEFT JOIN tb_atendimento at ON (ch.id_atendimento_chamado = at.id_atendimento) "
	." LEFT JOIN tb_pdv pv ON (ch.id_pdv_chamado = pv.id_pdv) "
	." LEFT JOIN tb_rede rd ON (pv.id_rede_pdv = rd.id_rede) "
	." LEFT JOIN tb_problema pb ON (ch.id_problema_chamado = pb.id_problema) "
	." LEFT JOIN tb_patrimonio pt ON (ch.id_patrimonio_chamado = pt.id_patrimonio) "
	." LEFT JOIN tb_status st ON (ch.id_status_chamado = st.id_status) "
	." LEFT JOIN tb_usuario us ON (ch.id_usuario_tecnico = us.id_usuario) "[color="#FF0000"][b](aqui em pego o nome do usuario tecnico)[/b][/color]
               ." LEFT JOIN tb_usuario us ON (ch.id_usuario_abertura = us.id_usuario) "[color="#FF0000"][b](aqui eu pego o nome do usuario que abriu o chamado)[/b][/color]
	." LEFT JOIN tb_tempo tm ON (ch.id_tempo_chamado = tm.id_tempo)";

	$arrFiltros = array();
	if( $Chamado->getIdChamado()!='' && !is_null($Chamado->getIdChamado() ) ) array_push($arrFiltros, "id_chamado = ".$Chamado->getIdChamado() );
	if(  count($arrFiltros)>0  ) $sql .= " WHERE ".implode(" AND ", $arrFiltros);

	$arrDadosChamado = $this->conn->GetRow($sql);

	$Chamado = new Chamado();
	$Chamado->setIdChamado($arrDadosChamado['id_chamado']);
	$Chamado->setNomAtendimentoChamado($arrDadosChamado['nom_atendimento']);
	$Chamado->setNomPdvChamado($arrDadosChamado['nom_pdv']);
	$Chamado->setNomRede($arrDadosChamado['nom_rede']);
	$Chamado->setNomProblemaChamado($arrDadosChamado['nom_problema']);
	$Chamado->setNumPatrimonioChamado($arrDadosChamado['num_patrimonio']);
	$Chamado->setNomUsuarioTecnico($arrDadosChamado['nom_usuario']); [color="#FF0000"][b]( o problema e aqui como eu vou fazer para diferenciar e saber qual o nome esta no campo nom_usuario? )[/b][/color]
               $Chamado->setNomUsuarioAbertura($arrDadosChamado['nom_usuario']); 
	$Chamado->setDesProblema( utf8_encode( $arrDadosChamado['des_problema'] ) );
	$Chamado->setDesSolucao( utf8_encode( $arrDadosChamado['des_solucao'] ) );
	$Chamado->setDtaCadastroChamado($arrDadosChamado['dta_cadastro_chamado']);
	$Chamado->setTepAtendimento($arrDadosChamado['tep_atendimento']);
	return $Chamado;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está chamando a mesma tabela 2 x, mude o alias.

 

...
." LEFT JOIN tb_usuario us1 ON (ch.id_usuario_tecnico = us1.id_usuario) "[color="#FF0000"][b](aqui em pego o nome do usuario tecnico)[/b][/color]
." LEFT JOIN tb_usuario us2 ON (ch. 
...

 

Isto permite que os campos de cada tabela sejam referidos de forma distinta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos la... vou tentar explicar de maneira mais clara.

Eu tenho duas tabelas a CHAMADO e a USUARIO.

Na tabela CHAMADO eu gravo dois usuarios diferentes. O usuario que abriu o chamado e o usuario que será o tecnico(responsavel por resolve-lo) do chamado. Na tabela CHAMADO eu gravo apenas o ID dos dois usuarios.

Tem uma certa situação que é a de listagem dos chamados em aberto onde eu tenho que mostrar o nome dos dois usuarios tanto o tecnico quanto o usuario que abriu o chamado.

Nessa situação eu dou um select no banco de dados com o ID do CHAMADO e já dando JOIN'S vou pegando todas as outras informações que estão salvas na tabela CHAMADO como ID.

Uma das coisas é os dois usuarios onde eu tenho que pegar o nome de usuario do usuario de abertura e do usuario tecnico do chamado. O nome deles vem da tabela USUARIO.

E quando eu dou esse SELECT o qual esta ai em cima que e basicamente isso:


 

Vamos lá... Vou tentar explicar de maneira mais clara.

Eu tenho duas tabelas a CHAMADO e a USUARIO.

Na tabela CHAMADO eu gravo dois usuários diferentes. O usuário que abriu o chamado e o usuário que será o técnico (responsável por resolvê-lo) do chamado. Na tabela CHAMADO eu gravo apenas o ID dos dois usuários.

Tem certa situação que é a de listagem dos chamados em aberto onde eu tenho que mostrar o nome dos dois usuários tanto o técnico quanto o usuário que abriu o chamado.

Nessa situação eu dou um select no banco de dados com o ID do CHAMADO e já vou dando JOIN'S para pegar todas as outras informações que estão salvas na tabela CHAMADO como ID.

Uma das coisas é os dois usuários onde eu tenho que pegar o nome de usuário do usuário de abertura e do usuário técnico do chamado. O nome deles vem da tabela USUARIO.

E quando eu dou esse SELECT que esta ai em cima que e basicamente isso:

SELECT ch.id_chamado, at.nom_atendimento, pv.nom_pdv, pv.id_rede_pdv, rd.nom_rede, pb.nom_problema, pt.num_patrimonio, us1.nom_usuario, us2.nom_usuario, 
ch.des_problema, ch.des_solucao, ch.dta_cadastro_chamado, tm.tep_atendimento, ch.id_usuario_abertura 
FROM tb_chamado AS ch  
LEFT JOIN tb_atendimento at ON (ch.id_atendimento_chamado = at.id_atendimento) 
LEFT JOIN tb_pdv pv ON (ch.id_pdv_chamado = pv.id_pdv) 
LEFT JOIN tb_rede rd ON (pv.id_rede_pdv = rd.id_rede) 
LEFT JOIN tb_problema pb ON (ch.id_problema_chamado = pb.id_problema) 
LEFT JOIN tb_patrimonio pt ON (ch.id_patrimonio_chamado = pt.id_patrimonio) 
LEFT JOIN tb_status st ON (ch.id_status_chamado = st.id_status) 
LEFT JOIN tb_usuario us1 ON (ch.id_usuario_tecnico = us1.id_usuario) 
LEFT JOIN tb_usuario us2 ON (ch.id_usuario_abertura = us2.id_usuario) 
LEFT JOIN tb_tempo tm ON (ch.id_tempo_chamado = tm.id_tempo) 
WHERE id_chamado = 1

 

Ele me retorna dois campos com o nome nom_usuario porem com o mesmo nome de usuário e não com o nome de cada usuário (usuário que abriu o chamado e usuário técnico)

Exemplo do resultado desse select que postei ai em cima:

 

id_chamado => 1

nom_atendimento => Telefone

nom_pdv => Oi Loja Guilherme Rocha FL CE

id_rede_pdv => 1

nom_rede => Oi

nom_problema => Hardware

num_patrimonio => 0254

nom_usuario => Usuario Tecnico --- ESSE

nom_usuario => Usuario Abertura --- ESSE E O 2

des_problema => E-mail personalizado quando finalizar o chamado e enviar o e-mail para o pessoal.

des_solucao => Teste para ver a disposição do e-mail quando finalizado.

dta_cadastro_chamado => 2011-07-11 09:24:53

tep_atendimento => -0

id_usuario_abertura => 2

 

Eu preciso traze o nome dos dois e não estou sabendo como vou fazer isso. Tenho que fazer um GROUP?

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.