Ir para conteúdo

POWERED BY:

Arquivado

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

Leonardo Carmo

Select para exibir mensagens do inbox

Recommended Posts

Boa tarde galera! Tudo bem?

 

Seguinte, estou com um problema e preciso de uma ajudinha! Estou fazendo um sistema de inbox parecido com o facebook, porem estou com problemas em uma unica parte. Sabe ali na lateral quando você clica em mensagens e fica o nome da pessoa que enviou a ultima mensagem e uma parte da mensagem? Então, é isso.

 

Qual meu problema?

Consegui fazer o select da maneira que eu queria o unico porem é que ele está trazendo a primeira mensagem que iniciou a conversa e não a ultima para que eu exiba um pequeno pedaço! Pois preciso fazer um GROUP BY para que a pessoa apareça apenas uma vez ali. Vou mostrar como é minha tabela:

 

Tabela

- user_inbox_from

- user_inbox_to

- user_inbox_msg

- user_inbox_date

 

Logica

Preciso pegar todas as mensagens que tem o ID do usuario no user_inbox_from e no user_inbox_to agrupar para que mostre o usuario apenas uma vez e que ele me mostre a ultima mensagem e não a primeira. Alguem consegue me dar uma luz? Obrigado!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de mais nada sua tabela esta necessitando de um id para identificar a msg, já que duas msgs enviadas no mesmo momento pela mesma pessoa para a mesma pessoa nao terão diferençã,a nao ser o conteudo que nao ser ve para informar qual foi a primeira e qual foi a ultima...

 

mas, interpretando que o erro nao será corrigido em breve no seu projeto vc deve usar o sql abaixo para obter o resultado desejado.

select user_inbox_from,user_inbox_to, left(user_inbox_msg,50) msg_curta, user_inbox_date
from tabela ta,
(select user_inbox_from, user_inbox_to, max(user_inbox_date) ultima_msg 
from tabela
group by user_inbox_from, user_inbox_to) um

where 
ta. user_inbox_from = um.user_inbox_from 
and ta.user_inbox_to = um.user_inbox_to
and ta.user_inbox_date = um.ultima_msg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você diz que eu teria que gerar um "ID" para cada conversa? Mas caso esse banco fique com muitas mensagens isso não pode causar uma lentidão? Criando esse ID para cada conversa eu tambem não iria conseguir, pois na hora do GROUP BY que estou tendo problemas... Eu tenho uma outra coluna que identifica se é professou ou aluno (é um inbox para duvidas) então eu pego o ID do professor e depois dou um GROUP BY pelo id do aluno e é nessa hora que ele ignora o ORDER da data e pega a primeira mensagem.

 

Executei essa que você enviou e gerou o seguinte erro

Error Code: 1052. Column 'user_inbox_from' in field list is ambiguous

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada msg tem q ter seu proprio id e com PK. ID não causa lentidao, de onde vc tirou isso?

 

Segue correto, esqueci de referenciar a tabela de origem dos campos do select

select ta.user_inbox_from, ta.user_inbox_to, left(ta.user_inbox_msg,50) msg_curta, ta.user_inbox_date
from tabela ta,
(select user_inbox_from, user_inbox_to, max(user_inbox_date) ultima_msg 
from tabela
group by user_inbox_from, user_inbox_to) um

where
ta. user_inbox_from = um.user_inbox_from 
and ta.user_inbox_to = um.user_inbox_to
and ta.user_inbox_date = um.ultima_msg

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.