Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/08/2011, 14:01
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
[Logica] Comentarios anidados

Estoy planeando una extension de comentarios y deben ser anidados (threaded) y, de preferencia, que puedan paginarse.

El principal problema de esto, es que la mayoria de soluciones que he visto (incluyendo la mia en la primera version) hay que obtener todos los comentarios y agruparlos con sus respectivas respuestas por medio de bucles, lo que complica muchisimo la paginacion.

Pensando en facilitar un poco esto, se me ocurrio que podria agregar un campo para ordenar, quedando la tabla mas o menos asi:

Código MySQL:
Ver original
  1.     cmreplyto INT(10) NOT NULL DEFAULT 0,
  2.     cmorder VARCHAR(60),
  3.     cmmodule VARCHAR(10),
  4.     cmitem INT(10) NOT NULL,
  5.     cmuser INT(10) NOT NULL,
  6.     cmdate INT(10) NOT NULL,
  7.     cmcomment TEXT
  8.     cmip VARCHAR(255)
  9.     cmstatus TINYINT(1)
  10.     cmnotify TINYINT(1)

Entonces, en cmorder guardaria:
1- Mensaje original, solo la id
2- Respuesta a original: id-original.id-respuesta
3- Respuesta a respuesta: id-original.id-respuesta-padre.id-respuesta

Como ejemplo:
Código:
id	resp	orden
1	0	1
2	1	1.2
3	0	3
4	2	1.2.4
5	1	1.5
6	4	1.2.4.6
7	2	1.2.7

Ordenado:
1
1.2
1.2.4
1.2.4.6
1.2.7
1.5
3
Esto facilitaria muchisimo tanto generar la lista como la paginacion y, al crear un nuevo comentario, lo unico que habria que hacer es obtener la id y actualizar despues el orden y estoy casi seguro que optimizaria recursos (memoria, cpu y tiempo)... ya lo comentare cuando lo pruebe.

El problema es que con esto solo podria obtener los comentarios en orden ascendente (primero los mas antiguos) y me gustaria, si alguien puede colaborar, ver la forma de poder obtenerlos tambien en forma descendente, preferentemente, sin tener que recurrir a una funcion en PHP, porque primero aparecerian las respuestas y al final el comentario original.

Todas las opiniones y comentarios son bienvenidos.

Gracias.
__________________
- León, Guanajuato
- GV-Foto