Qual é o melhor método para separar discussões aninhados em várias páginas - para aplicação web?

StackOverflow https://stackoverflow.com/questions/582315

Pergunta

Eu estou projetando um visor de mensagens de rosca para uma aplicação PHP / MySQL - como comentários sobre Slashdot ou Youtube - e estou querendo saber como eu deveria ir sobre como solicitar as observações e separando-a em páginas de modo que você pode ter, digamos, 20 comentários para uma página, mas ainda tê-los aninhados.

Comentários em meu aplicativo podem ser aninhados níveis ilimitados, e esta estrutura é representada usando o que eu acredito é uma tabela de Adjacência Relation, uma tabela separada que contém uma linha para cada par que tem qualquer relação ascendente / descendente. Que a tabela relacionamento tem CHILDID, ParentId e nível onde um nível de 2 significa "bisavô", e assim por diante.

A minha pergunta é um dos dois usabilidade para o usuário final, e da praticidade de construção de uma consulta DB eficiente. Eu considerei estas opções:

  • resultados dividir em páginas por data, independentemente da posição na árvore, de modo que todos os comentários dentro de um determinado intervalo de datas vão aparecer juntos, mesmo se eles não aparecem com seus pais. Qualquer comentário que foi publicado em um momento semelhante ao seu pai vai aparecer na mesma página e nesses casos podemos exibi-los 'aninhado', mas haverá comentários que são órfãs de seus pais. Este é provavelmente aceitável - é a maneira como as coisas são feitas em comentários do YouTube - um comentário feito muito mais tarde do que o seu pai não vai aparecer na mesma página como seu pai (se o pai não é sobre o mais recente página), mas em vez disso aparecer com outros mais novos comentários.

  • Recuperar os nós de modo como você iria percorrer uma árvore. Isto dá prioridade à estrutura de árvore em vez da data, embora os irmãos ainda podem ser classificados por data. O benefício disso é que as respostas são sempre colocados com o seu pai (o comentário eles são em resposta a) mesmo que o pai é um número de páginas do mais recente comentários. Isto é como as coisas são feitas em aplicativos como o blog icanhascheezburger. Eu não gosto de algumas coisas sobre ele, como a maneira que todo mundo está tentado a acrescentar uma resposta para o que é o maior galho de árvore.

  • A terceira opção é fazer como Slashdot faz, onde ele não separar comentários em páginas, mas tem uma grande árvore -., A fim de manter o manejável tamanho da página que começa abate comentários baixa classificação em vez

Eu acho que a primeira seria a consulta mais simples DB dado a minha tabela de relação, mas estaria aberto a outras idéias.

Alguns desses sistemas, de todos os três tipos, limitar o nível de aninhamento de alguma forma - este é bastante fácil de fazer, uma vez que temos recursed sobre os níveis de X tudo mais podem ser combinados como se fossem irmãos. Por exemplo, comentários do YouTube só tornar a um nível. Outros sistemas às vezes dizem "nível de aninhamento ultrapassado" depois de 5 ou menos níveis.

Foi útil?

Solução

Presumo que a razão que você quer comentários aninhados em tudo é porque os usuários tendem a querer ler através de um único segmento de interesse de cada vez. Ou seja, você tem razão para acreditar que os usuários vão criar tópicos de correntes de pensamento coerente, e / ou o que é discutido em um segmento vai interessar a alguns usuários, mas não outros.

Se for esse o caso, eu não sei por que você iria querer dividir arbitrariamente uma linha entre páginas por data (opção 1). Usando uma única página com abate dos comentários com classificação baixa (opção 3) parece um pouco dura e pode desencorajar os usuários a postar comentários. Isso pode ser uma coisa boa se você tem uma massa audiência como SlashDot, mas pode ser indesejável para sites com taxas de visitação mais típicos.

Talvez você possa ter algo parecido com a opção 2, com os tópicos na mesma página, mas se um fio começa a ficar muito longo, ele é enrolado em um único link que leva o usuário para uma página dedicada a esse segmento. Alternativamente, os fios longos pode ser reduzido para apenas exibir suas linhas de assunto e autores, cada qual no link de volta para o local apropriado em uma página dedicada para o segmento.

Eu suspeito que a tendência para os usuários a postar comentários irrelevantes no maior segmento é um produto dos usuários que não querem ser incomodados com rolagem para encontrar o fim da rosca, ou encontrar um segmento que é mais adequado. Por compactação automaticamente tópicos longos, deixando a raiz de todos os tópicos exibidos em uma única página de comprimento gerenciável, os usuários podem facilmente varredura para um segmento de interesse e adicionar a ele se desejar.

Outras dicas

Eu acho que o que você precisa é armazenar um conjunto de dados hierárquicos em um banco de dados. Você deve começar com este artigos: artigo na sitepoint artigo no site da MySQL

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top