Ir ao conteúdo
  • Cadastre-se

PHP Select 2 tabelas mysql


Ir à solução Resolvido por DiF,

Posts recomendados

Caros boa noite, estou com uma dúvida

 

Preciso de ajuda no $sql3 ou reformular a minha lógica:

Atualmente estou fazendo assim:

1. Encontrar as equipes que fazem parte da atividade;

2. Encontrar os participantes da equipe;

3. Somar os pontos dos participantes da equipe;

 

O que eu preciso fazer é somar os pontos (ATV_XP) da tabela (USUARIOS_ATIVIDADE) dos usuários (USU_CODIGO) que pertencem a equipe (EQP_CODIGO);

 

Possuo 2 tabelas:

TABELA USUARIOS_ATIVIDADE campos principais:

ATV_CODIGO (código da atividade),

USU_CODIGO (código do usuário),

ATV_XP (pontos do usuário)

aqui faço os controles de interações dos usuários;

 

TABELA EQUIPES campos principais:

ATV_CODIGO (código da atividade),

EQP_CODIGO (código da equipe),  

EQP_USUARIO (código do usuário),  

aqui eu controlo as equipes das atividades

 

Segue abaixo como estou fazendo hoje, valeu abraço.

 

public function getMembrosEquipes($id) {	
		
		$retorno = array();
		$cont = 0;
			//select para verificar as equipes da atividade
			$sql = "SELECT DISTINCT EQP_CODIGO, EQP_NOME
				FROM EQUIPES
				WHERE ATV_CODIGO =".$id;
					
			$exc = new OracleRecordset($this->conexao->execute($sql));
			//echo "@@@@@".$sql;
		
			while($exc->fetch()) {
				//select para encontrar os participantes da equipe da atividade
				$sql2 = "SELECT EQP_USUARIO
				FROM EQUIPES
				WHERE EQP_CODIGO =".$exc->getResult('EQP_CODIGO')."
				AND ATV_CODIGO =".$id;
				$exc2 = new OracleRecordset($this->conexao->execute($sql2));
				$exc2->fetch();
				//echo "#####".$sql2;
				
				$usu = $exc2->getResult('EQP_USUARIO');
				$equipe = $exc->getResult('EQP_CODIGO');
				
				//select para somar os pontos do usuário na tabela USUARIOS_ATIVIDADE
				$sql3 = "SELECT count(DISTINCT UA.USU_CODIGO), sum(UA.ATV_XP) AS ATV_XP, U.USU_CODIGO, U.USU_NOME, U.USU_SOBRENOME, U.USU_IMAGEM, U.USU_XP
					FROM USUARIOS_ATIVIDADE UA
					LEFT OUTER JOIN USUARIOS U ON (UA.USU_CODIGO = U.USU_CODIGO) 
					WHERE UA.ATV_CODIGO = ".$id."
                    GROUP BY UA.USU_CODIGO
					ORDER BY ATV_XP DESC";
				$exc3 = new OracleRecordset($this->conexao->execute($sql3));
				$exc3->fetch();
				echo "#####".$sql3;
				
				$atvbean = new AtividadesBean();		
                $atvbean->setAtvXp($exc3->getResult('ATV_XP'));

				$eqpbean = new EquipesBean();		
				$eqpbean->setEqpParticipantes($exc2->getResult('EQP_USUARIO'));
				$eqpbean->setEqpCodigo($exc->getResult('EQP_CODIGO'));
				$eqpbean->setEqpNome($exc->getResult('EQP_NOME'));
				$eqpbean->setEqpAtvXp($atvbean);

				$retorno[$cont] = $eqpbean;

				$cont++;
			}
		
		unset($exc);
		unset($exc2);
		unset($exc3);
		return $retorno;
		
	}

 

Link para o comentário
Compartilhar em outros sites

  • Moderador
  • Solução

@Gláuber Guilherme Signori Olá,

 

Não sei como está modelado seu banco de dados, mas é imprescindível que se siga as 1NF, 2NF pelo menos. No caso, destrinchar as tabelas em várias.

 

Dado este modelo:

xWPyhbw.png

 

Basicamente você fará uma única consulta para trazer a soma dos pontos dos usuários agrupados por equipe.

Desta forma:

SELECT equipes.nome, 
       (SELECT SUM(usuario_pontos.pontos)) AS total
FROM usuario_atividade
INNER JOIN equipes ON equipes.id = usuario_atividade.equipe 
INNER JOIN usuario_pontos ON usuario_pontos.id = usuario_atividade.pontos
GROUP BY equipes.nome

 

A consulta acima traz o nome da equipe e a soma dos pontos agrupados pelo nome da equipe.

Repare que  a tabela usuario_atividade é uma tabela N:N  entre usuario e usuario_pontos.

Onde o id dos pontos de cada um é enviado para a tabela usuario_atividade, que nesta tabela também recebe o id do usuário, id da equipe e id da atividade.

Resultado:

rLbzAZ0.png

Com  isso pode-se fazer uma segunda consulta para mostrar a parcial desta forma:

SELECT atividades.nome, 
       usuarios.nome,
       equipes.nome,
       usuario_pontos.pontos
FROM usuario_atividade
INNER JOIN atividades ON atividades.id = usuario_atividade.atividade
INNER JOIN usuarios ON usuarios.id = usuario_atividade.usuario
INNER JOIN equipes ON equipes.id = usuario_atividade.equipe
INNER JOIN usuario_pontos ON usuario_pontos.id = usuario_atividade.pontos

Resultado:

60UaLAz.png

 

Basicamente é isso. Agora no PHP é com você :thumbsup:

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...