listar dados mysql
18/03/2014
0
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
Posts
21/03/2014
Claudio Lopes
23/03/2014
Marcio Araujo
"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]
24/03/2014
Claudio Lopes
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...
24/03/2014
Paulo Sérgio
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
24/03/2014
Claudio Lopes
02/04/2014
Claudio Lopes
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 ...
02/04/2014
David Sylvestre
Clique aqui para fazer login e interagir na Comunidade :)