Pregunta

Estoy creando un tablero de mensajes con hilos y estoy tratando de mantenerlo simple. Hay una tabla de mensajes y luego una tabla de respuestas que tiene un campo 'reply_id' que puede ser nulo para indicar una respuesta de nivel superior o un valor que indica una respuesta enhebrada.

¿Estoy un poco confundido sobre cómo hacer una llamada SELECT en este tipo de tabla?

Reply
-id (every reply gets a unique id)
-message_id (the message it is replying to)
-reply_id (the id of the reply it may be replying to - for threading)
-reply

Sé que esto puede ser un problema complejo, especialmente para el rendimiento, pero realmente solo estoy buscando la solución más básica para esto.

gracias ...

¿Fue útil?

Solución

Estás utilizando el ingenuo " libro de texto " forma de almacenar árboles, es decir, almacenar una referencia al padre inmediato. Este diseño se llama Lista de adyacencia . Hay otras soluciones:

  • Enumeración de ruta , donde almacena en cada nodo del árbol una cadena que codifica a todos sus antepasados ??directos.
  • Conjuntos anidados , un enfoque inteligente de Joe Celko donde utiliza dos valores numéricos por nodo para vincular a todos sus descendientes.
  • Tabla de cierre (o Relación de adyacencia), donde utiliza una tabla separada para enumerar cada par ancestro-descendiente.

Vea mi respuesta a " ¿Cuál es la forma más eficiente / elegante de analizar una mesa plana en un árbol? " para referencias y ejemplos del diseño de la tabla de cierre.

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