Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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!
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
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
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