¿Cuál es el mejor método para separar conversaciones anidadas a través de múltiples páginas - para aplicaciones web?

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

Pregunta

Estoy diseñando una pantalla de secuencia de mensajes para una aplicación PHP / MySQL - al igual que los comentarios sobre Slashdot o Youtube - y me pregunto cómo debería ir sobre el pedido de los comentarios y la separación en páginas para que pueda tener, digamos, 20 comentarios a una página, pero todavía les han anidado.

Los comentarios en mi aplicación se pueden anidar niveles ilimitados, y esta estructura se representa usando lo que creo que es una tabla de Adyacencia Relación, una tabla separada que contiene una fila para cada par que tiene alguna relación ascendente / descendente. Esa tabla de relación tiene childid, PARENTID y nivel en el que un nivel de 2 significa "bisabuelo", y así sucesivamente.

Mi pregunta es uno de los dos facilidad de uso para el usuario final, y de sentido práctico de la construcción de una consulta de base de datos eficiente. He considerado las siguientes opciones:

  • Resultados de la división en páginas por fecha, independientemente de la posición en el árbol, por lo que todos los comentarios dentro de un determinado rango de fechas aparecerán juntos, incluso si no aparecen con sus padres. Cualquier comentario que fue publicado en un momento similar al de su padre aparece en la misma página y en esos casos podemos mostrarlos 'anidada', pero habrá comentarios que son huérfanos de sus padres. Esta es probablemente aceptable - que es la forma de hacer las cosas en los comentarios de YouTube - un comentario hecho mucho más tarde que su padre no aparece en la misma página como su padre (si el padre no está en la última página), pero en su lugar aparecen con los otros comentarios más recientes.

  • Recuperación de los nodos con el fin como lo haría recorrer un árbol. Esto da prioridad a la estructura de árbol en lugar de la fecha, aunque los hermanos todavía pueden ser clasificadas por fecha. El beneficio de esto es que las respuestas siempre se colocan con su padre (el comentario de que son en respuesta a) incluso si el padre es un número de páginas de los comentarios más recientes. Así es como se hacen las cosas en aplicaciones tales como el blog icanhascheezburger. No me gustan algunas cosas al respecto, al igual que la forma en que cada uno es tentado para agregar una respuesta a lo que es la mayor rama de un árbol.

  • La tercera opción es hacer como Slashdot hace, en la que no se separa comentarios en páginas, pero tiene un gran árbol -. Con el fin de mantener el tamaño de la página manejable que se inicia el sacrificio de los comentarios de baja calificación en lugar

Creo que la primera sería la consulta simple DB dado mi tabla de relación, pero estaría abierto a otras ideas.

Algunos de estos sistemas, de los tres tipos, limitar el nivel de anidamiento de alguna manera - esto es bastante fácil de hacer, una vez que hemos recursed sobre X todo lo demás niveles pueden combinarse entre sí como si fueran hermanos. Por ejemplo, los comentarios de YouTube sólo se prestan a un nivel. Otros sistemas a veces dice "nivel de anidamiento excedido" después de 5 o más niveles.

¿Fue útil?

Solución

Asumo que la razón por la que desea que los comentarios anidados en absoluto se debe a que los usuarios tienden a querer leer a través de un solo hilo de interés a la vez. Es decir, usted tiene razones para creer que los usuarios crear hilos de cadenas coherentes de pensamiento, y / o lo que se discutió en un hilo será de interés para algunos usuarios pero no en otros.

Si ese es el caso, no sé por qué se va a querer dividir arbitrariamente un hilo a través de páginas por fecha (opción 1). El uso de una sola página con el sacrificio de los comentarios de baja calificación (opción 3) parece un poco duro y puede disuadir a los usuarios de la publicación de comentarios. Eso puede ser una buena cosa si usted tiene una masa audiencia como Slashdot, pero puede ser indeseable para los sitios con tasas de visitas más típicas.

Tal vez usted puede tener algo como la opción 2, con todos los hilos en la misma página, pero si un hilo empieza a ser demasiado largo, se pone enrollado en un único enlace que lleva al usuario a una página dedicada a ese tema. Como alternativa, los hilos largos se pueden reducir a solo mostrar sus líneas y autores, cada cual a su vez enlace al lugar apropiado en una página dedicada a la rosca.

Sospecho que la tendencia de los usuarios para enviar comentarios irrelevantes en la rosca más grande es un producto de los usuarios que no quieren ser molestados con desplazamiento alrededor para encontrar el extremo del hilo, o encontrar un hilo que es más adecuado. Compactando automáticamente hilos largos, dejando la raíz de todas las discusiones que se muestran en una sola página de longitud manejable, los usuarios pueden escanear fácilmente por un hilo de interés y añadir a ella si lo desea.

Otros consejos

Creo que lo que necesita es un conjunto de datos almacenar en una base de datos jerárquicos. Usted debe comenzar con este artículo: artículo en sitepoint artículo en la web de MySQL

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top