Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu gostaria de agrupar (não entendam como group by) algumas conversas (como se fossem comentários), eu já fiz isso uma vez mas acabei trocando o sistema e não encontrei o código para ver como havia feito, e depois de tentar um tanto estou aqui, eu tenho uma tabela de mensagens/comentários que guarda :
- id (auto-incremento);
- texto
- id original (vazio) //Esse último código por padrão é vazio, exceto que eu queira que ele seja uma resposta ao original;
Digamos que eu tenha então quatro registro, sendo dois comuns e outros dois como respostas à um deles:
id | texto | id-orig
1 texto -
2 texto 1
3 texto -
4 texto 1
Eu gostaria de organizá-los da seguindo forma:
1 texto -
2 texto 1 //indentei apenas para facilitar
4 texto 1
3 texto -
Isto é, que os que sejam resposta ao primeiro fiquem agrupados à ele e ordenado de alguma forma, seja pelo codigo ou pela data... e que eu consiga também ordenar os originais ( 1 e 3 );
Já tentei com várias sub-consultas e acabei voltando ao mesmo lugar, nada.
ObrigadoDe maneira geral a estrutura esta errada.
deveria ser
ID_CONVERSA| ID_MSG | TEXTO
>
Em 02/03/2017 at 06:34, Motta disse:
Tente
Order by coalesce(id_original,id),id
Eu entendi como você entendeu, rs... não resolveu mas o resultado dessa forma usando coalesce me de a ideia de fazer algo com resultado semelhante usando UNION, assim eu teria a opção de ainda usar where e order com o resultado, e ficou assim
SELECT * FROM (SELECT id as cod,cod_comentario, nome,id as original, id_original,texto
FROM comentarios
where ativo = '1'
and artigo = '70'
UNION
SELECT id_orig as cod,id, nome,id_original as original, id_original, texto
FROM comentarios
where ativo = '1'
and artigo = '70')
RESULTADO
WHERE RESULTADO.cod <> ''
and if (RESULTADO.id_original != '',RESULTADO.id_original, RESULTADO.id) >= RESULTADO.original
order by cod desc, id asc
Obrigado
Tente
Order by coalesce(id_original,id),id