Foros del Web » Programando para Internet » PHP »

[Logica] Comentarios anidados

Estas en el tema de [Logica] Comentarios anidados en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/08/2011, 14:01
Avatar de 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
  #2 (permalink)  
Antiguo 10/08/2011, 14:12
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: [Logica] Comentarios anidados

¿La consulta como la tienes al momento? Es para darme una mejor idea, lo más probable que un experto en Base de datos te pueda ayudar mejor, pero en lo que llega uno, aquí me tienes jejeje.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 10/08/2011, 14:12
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [Logica] Comentarios anidados

Que tal Triby,

El sistema que estas utilizando se conoce como Path Enumeration(sino recuerdo mal) y entiendo que en realidad no es el orden, es el path al nodo, podrías agregar otro campo que si sea el orden dentro del path y luego para ordenar concatenar el path con el orden.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 10/08/2011, 14:17
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: [Logica] Comentarios anidados

Ooohhh, interesante, ¿te refieres a algo así http://onlamp.com/pub/a/onlamp/2004/...hical_sql.html?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 10/08/2011, 14:21
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [Logica] Comentarios anidados

Estuve cerca, esta al final, el nombre correcto es The Edge Enumeration Model
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 10/08/2011, 14:26
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: [Logica] Comentarios anidados

Aquí hay una breve explicación de lo que dices al final y es verdad parece ser que es lo que necesita http://onlamp.com/pub/a/onlamp/2004/...ql.html?page=2
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 10/08/2011, 14:29
Avatar de 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
Respuesta: [Logica] Comentarios anidados

Genial, gracias por la informacion, voy a digerirla para ver como soluciono lo del orden descendente.

Abimael, por ahora no tengo una consulta, estoy en fase de diseño y las pruebas, que funcionaron correctamente, fueron en Excel.

P.D. Puse esto aqui y no en base de datos porque me parece que al final, la solucion mas facil (y tal vez optima) para obtener los datos por orden descendente seria por PHP, pero todavia no estoy seguro de ello... ya veremos despues de leer los enlaces.
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 10/08/2011 a las 14:47
  #8 (permalink)  
Antiguo 10/08/2011, 15:00
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [Logica] Comentarios anidados

Triby hay un libro que trata este tema justamente, te sugiero que lo leas, se llama Joe Celko's Trees and Hierarchies in SQL for Smarties

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: anidados, comentarios, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 14:33.