listar dados mysql

18/03/2014

0

PHP

Galera to com o seguinte problema

tenho uma tabela de mensagens onde tenho id, quem postou, onde postou e data
meu problema é o seguinte
quero agrupar os resultados de acordo com quem postou

digamos
1 - fulano - perfil - 2014-03-18 15:03:01
1 - outro- perfil - 2014-03-18 15:05:01
1 - fulano - perfil - 2014-03-18 15:06:01
1 - outro- perfil - 2014-03-18 15:07:01
1 - fulano - perfil - 2014-03-18 15:08:01

quero que ele fique assim
1 - fulano - perfil - 2014-03-18 15:08:01
1 - outro- perfil - 2014-03-18 15:07:01

agrupando por usuário e listando a com a data mais recente
tenho o seguinte código

function listaMsgs($conecta,$pagina,$usuario,$limite,$last,$tipo){
	
	if($pagina == $usuario){$privacidade = '0';}else{$privacidade = '1';}
	
	if($last==0){$vejamais='';}else{$vejamais=" AND m_id<$last ";}

	$query = "SELECT * FROM (SELECT M.*, U.u_id, U.u_url, U.u_titulo, U.u_opcoes, O.o_imagem FROM mensagens M, usuarios U, opcoes O WHERE m_usuario = ? AND u_id = M.m_realizou AND o_codigo = U.u_opcoes $vejamais GROUP BY m_realizou ORDER BY m_data DESC LIMIT $limite) as mensagens GROUP BY m_realizou ORDER BY m_data DESC";
	try{
		$reQuery = $conecta->prepare($query);
		$reQuery ->execute(array($pagina));
		$retorno = $reQuery->fetchAll(PDO::FETCH_ASSOC);
	}catch(PDOException $e){
		echo $e->getMessage();
	}
	
	$encontrados = count($retorno);
	if($encontrados == 0){
		$dep = '';
	}else{
		$dep = $retorno;
	}
	
	return array('Quantidade'=>$encontrados, 'Mensagens'=>$dep);
}



Ele funciona, porem quando eu tento fazer a paginação ele começa a repetir os dados
alguém me ajuda
Paulo Sérgio

Paulo Sérgio

Responder

Posts

21/03/2014

Claudio Lopes

Fazendo a query no phpmyadmin, ele repede os dados? se sim, vc tem um erro no relacionamento das tabelas.....
Responder

23/03/2014

Marcio Araujo

acho que deve usar isso na query

"ORDER BY coluna ASC" ou "ORDER BY coluna DESC"


não tenho certeza se vai dar certo, achei um site.

e tem esse link:

[url]http://www.mauricioprogramador.com.br/posts/como-ordenar-array-php-ordem-crescente-e-decrescente[/url]
Responder

24/03/2014

Claudio Lopes

Creio que o seu problema de duplicar dados seja na sua query
SELECT 
	* 
FROM 
   (SELECT 
		M.*, 
		U.u_id, 
		U.u_url, 
		U.u_titulo, 
		U.u_opcoes, 
		O.o_imagem 
	FROM 
		mensagens M, 
		usuarios U, 
		opcoes O 
	WHERE 
		m_usuario = ? 
		AND u_id = M.m_realizou AND 
		o_codigo = U.u_opcoes $vejamais 
	GROUP BY 
		m_realizou 
	ORDER BY 
		m_data DESC 
	LIMIT $limite) as mensagens 
GROUP BY 
	m_realizou 
ORDER BY 
	m_data DESC


O mais comun é usar left join, join e etc, porem vc faz um relacionamento direto, dai nao saberia lhe esplicar. Outro ponto é que você está usando uma sub query, bom dai fica a dica, sua query é muito grande, seria bom identa-la, porem seu codigo php ficaria grande. Use Procedures e passe parametros que você queira utilizar como crítérios, assim fica mais facil até de dar manutenção.

segue o link para pesquisa
https://www.devmedia.com.br/procedures-e-funcoes-no-mysql/2550

faça a consulta no sql e print o resultado veja se o resultado da query duplica seus dados...
Responder

24/03/2014

Paulo Sérgio

Consegui resolver o problema...
Primeiro eu fiz uma quero listando o 1 post por vez e apliquei o o ORDER BY, depois joguei eles dentro de um foreach e então fiz a nova consulta fazendo comparando os ids
Responder

24/03/2014

Claudio Lopes

Cara veja se isso será a melhor saída, você está fazendo duas querys, sendo que você teria mais desempenho fazendo apenas uma vez....
Responder

25/03/2014

Paulo Sérgio

Como seria isso?
Responder

30/03/2014

Marcio Araujo

Paulo Sérgio, deu certo?
Responder

02/04/2014

Claudio Lopes

Paulo voce fez assim

1ª query roda os dados

então você percorre o array com o foreach e o resultado voce faz outra query
então pegando um resultado e colocando na condição where


Porém, no procedimento antigo vc tinha dados duplicados devido aos seus relacionamentos do banco... os seus on, se vc verificar onde está isso, vc para de fazer o procedimento assima.

Vou lhe aplicar um exemplo:



sem a primeira query te reorna 300 linhas, e a segunda te retorna 10 linhas.... então pra cada linha da primeira consulta vc dispara uma consulta no banco...
dependendo do seu volume e a longo prazo... isso pode afetar o desempenho ...





Responder

02/04/2014

David Sylvestre

Não seria muito mais simples dar um MAX na data para retornar a ultima postagem agrupando por usuário não???
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar