Foros del Web » Programando para Internet » PHP »

Comentario de comentario (respuesta)

Estas en el tema de Comentario de comentario (respuesta) en el foro de PHP en Foros del Web. Hola muy buenas a todos chicos, que tal andan? Espero que bien jeje. Ok, a lo que voy, como ya en el título expliqué un ...
  #1 (permalink)  
Antiguo 08/05/2016, 19:03
 
Fecha de Ingreso: julio-2015
Ubicación: Distrito Federal
Mensajes: 97
Antigüedad: 8 años, 9 meses
Puntos: 2
Comentario de comentario (respuesta)

Hola muy buenas a todos chicos, que tal andan? Espero que bien jeje.

Ok, a lo que voy, como ya en el título expliqué un poco, lo que quiero lograr es poder responder un comentario, comentar un comentario, como le quieran decir hehe, la cosa es que no se por donde empezar. Ya tengo el sistema de comentarios hecho pero no se como empezar a hacer esto, si alguien pudiera horientarme se los agradecería bastante.
  #2 (permalink)  
Antiguo 08/05/2016, 20:18
 
Fecha de Ingreso: abril-2015
Mensajes: 11
Antigüedad: 9 años
Puntos: 0
Respuesta: Comentario de comentario (respuesta)

yo en alguna oportunidad usé en la db un campo que funcionaba como flag, el campo se llamaba child y no me acuerdo de donde copié el modelo, pero para cada comentario, guardaba en el campo child el identificador del comentario al que respondía, y todos los sucesivos guardaban el id del comentario padre. el resto los seleccionaba para mostralos con el identificador child, que decía "hijos de quien eran".
creo que con agragar un solo campo a la db no se te va a romper nada. suerte
  #3 (permalink)  
Antiguo 08/05/2016, 23:21
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Comentario de comentario (respuesta)

Hola:

El sistema de comentarios de mi página es como planteas (es más, se puede comentar el comentario del comentario...)
Lo explico en una apunte: : Los comentarios.
También hice un grupo de apuntes sobre lod comentarios...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 09/05/2016, 04:31
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: Comentario de comentario (respuesta)

Cita:
Iniciado por estebanpixel Ver Mensaje
el campo se llamaba child
La pregunta, en su formulación más genérica, es: cómo crear y mantener estructuras en árbol, sobre un almacenamiento basado en filas?

El sistema de "child" (más bien, "parent"), es la forma más sencilla, y "formal" de hacerlo,desde un punto de vista de estructura de la base de datos. Pero es importante pensar en todos los puntos de vista.Sobre todo, en cómo se va a acceder a los datos.
Supongamos que tienes un id de aquello sobre lo que se hacen comentarios (noticia, post de un blog, etc). Cómo obtienes sus comentarios?
- Caso 1:
La tabla "comentarios" tiene un campo "padre", y un campo "objetoComentado".
Los comentarios iniciales (que no son "respuesta"), tienen "padre" a NULL, y "objetoComentado" al id del objeto.
Los comentarios respuesta, tienen "padre" al id de comentario correspondiente, y "objetoComentado" al id del objeto.

Primera forma de acceder a los datos:
- Se obtienen todos los comentarios con padre==NULL.
- Por cada uno de ellos, recursivamente, se pregunta por comentarios respuesta.
Cuántas queries hacen falta ?:
1 para obtener los comentarios padre.
N, por cada uno de los anteriores, para ver si tiene comentarios hijos.
M, por cada uno de los hijos encontrados, para ver si tiene hijos....

Segunda forma:
- Se obtienen todos los comentarios con objetoComentado==id.
- En php, se crea el árbol completo, usando el campo "padre" (hay formas muy eficientes de hacerlo)
Cuantas queries hacen falta?: 1 , independientemente de la cantidad de comentarios.

Forma hibrida:
- Se obtienen todos los comentarios que no tienen padre.
- Se hace una lista de esos ids de comentario, y se obtienen todos los hijos para todos esos ids.En memoria, se asigna cada uno a su padre respectivo.
- Se hace una lista de estos últimos ids, y se obtienen de nuevo todos los hijos, que se vuelven a asignar.
- Se termina cuando la query devuelva 0 filas.
Número de queries hechas: tantas como profundidad tenga el árbol.

Problema de ambas: cómo paginas? En el primer caso, es extraordinariamente dificil. En el segundo, es posible hacerlo, pero siempre se obtienen todas las rows de la BD, para paginar.
Segundo problema: Cuánto cuesta responder a la pregunta: dame todas las respuestas al comentario X ? En el primer caso, consiste en hacer queries recursivas (cuyo rendimiento dependerá del número de respuestas). En el segundo, requiere obtener el árbol completo.

- Caso 2:
En la BD se almacena el path completo de respuestas, y el id del objetoComentado.
Es decir, en la tabla de comentarios, en vez del campo "padre", se almacena el "path":
El path, para un comentario "raiz", (no una respuesta), es su id:
Si el id es "100", su path es : "100#"
Los comentarios respuesta, tienen como path , el del padre, más su "id":
Si el id 200 es respuesta al 100, el path es "100#200#"
Desventajas:
Requiere más almacenamiento en la tabla, y, dependiendo de la profundidad máxima del árbol, el path puede requerir ser de tipo TEXT (ineficiente).
Ventajas:
Es fácil ordenar y paginar: Ordenando por el campo "path" se obtienen los primeros comentarios, y sus respuestas, antes que comentarios posteriores.
(Nota: la paginación de estructuras en árbol siempre va a seguir teniendo sus complicaciones, porque es otra operación que es muy natural para el concepto de "filas", pero extraña al concepto de "arbol")
Obtener todos los hijos de un determinado comentario,o respuesta, es muy sencillo.
En caso de que fuera necesario, operaciones del tipo "mover nodo", "eliminar nodo y todos sus hijos", etc, siguen siendo muy sencillas.
El número de queries para gestionarlo sigue siendo muy bajo.

Lo importante, siempre, es mantener bajo el número de queries.Cuantas menos hagas, muuuucho mejor.

Etiquetas: comentario
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




La zona horaria es GMT -6. Ahora son las 16:31.