Foros del Web » Programando para Internet » PHP »

Ordenando posts por última respuesta

Estas en el tema de Ordenando posts por última respuesta en el foro de PHP en Foros del Web. Hola amigos, en el foro que yo programé tengo un bloque en el que se muestran las 10 últimas respuestas que se han enviado, el ...
  #1 (permalink)  
Antiguo 01/09/2008, 17:49
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Ordenando posts por última respuesta

Hola amigos, en el foro que yo programé tengo un bloque en el que se muestran las 10 últimas respuestas que se han enviado, el bloque se muestra de esta forma:



Como pueden ver, la cosa funciona bien, pero si algún thread recibe más de 1 respuesta estas van apareciendo en dicha lista, pero quisiera hacer algo para que sólo se muestren las últimas respuestas pero que de los ultimos 10 threads en recibir respuestas muestre sólo la última enviada, de modo que no aparezcan más de 1 enlace por thread, no sé si me dejo entender, por ej. si el thread con ID 500 recibe 2 respuestas que sólo aparezca la última que se envió.

Actualmente la consulta con la que funciona la lista que puse en la imagen es la siguiente:

Código PHP:
$query mysql_query("SELECT fr.id_post, fr.titulo, fr.categoria, fr.seccion, fc.id_rpta, fc.id_post, UNIX_TIMESTAMP(fc.fecha) AS fechas, fc.idautor, fc.autor FROM foros fr, fororesp fc WHERE fr.id_post = fc.id_post AND fr.seccion<>'Zona X' ORDER BY fc.fecha DESC LIMIT 0, 10") or die(mysql_error()); 
Mi pregunta sería, dónde podría modificar para que sólo aparezca la última respuesta por cada thread; agradezco de antemano la ayuda.

Saludos.
  #2 (permalink)  
Antiguo 01/09/2008, 18:39
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Ordenando posts por última respuesta

Cita:
Iniciado por ZydRick Ver Mensaje
Hola amigos, en el foro que yo programé tengo un bloque en el que se muestran las 10 últimas respuestas que se han enviado, el bloque se muestra de esta forma:



Como pueden ver, la cosa funciona bien, pero si algún thread recibe más de 1 respuesta estas van apareciendo en dicha lista, pero quisiera hacer algo para que sólo se muestren las últimas respuestas pero que de los ultimos 10 threads en recibir respuestas muestre sólo la última enviada, de modo que no aparezcan más de 1 enlace por thread, no sé si me dejo entender, por ej. si el thread con ID 500 recibe 2 respuestas que sólo aparezca la última que se envió.

Actualmente la consulta con la que funciona la lista que puse en la imagen es la siguiente:

Código PHP:
$query mysql_query("SELECT fr.id_post, fr.titulo, fr.categoria, fr.seccion, fc.id_rpta, fc.id_post, UNIX_TIMESTAMP(fc.fecha) AS fechas, fc.idautor, fc.autor FROM foros fr, fororesp fc WHERE fr.id_post = fc.id_post AND fr.seccion<>'Zona X' ORDER BY fc.fecha DESC LIMIT 0, 10") or die(mysql_error()); 
Mi pregunta sería, dónde podría modificar para que sólo aparezca la última respuesta por cada thread; agradezco de antemano la ayuda.

Saludos.
ps creo que aca amigo....

Código PHP:
$query mysql_query("SELECT fr.id_post, fr.titulo, fr.categoria, fr.seccion, fc.id_rpta, fc.id_post, UNIX_TIMESTAMP(fc.fecha) AS fechas, fc.idautor, fc.autor FROM foros fr, fororesp fc WHERE fr.id_post = fc.id_post AND fr.seccion<>'Zona X' ORDER BY fc.fecha DESC LIMIT 0, 1") or die(mysql_error()); 
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 01/09/2008, 19:59
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Parece que no me entendiste o yo no me expliqué bien, a ver, con eso que me dices sólo se muestra una sola respuesta, y lo que yo quisiera es que se muestren las 10 últimas respuestas pero sin que se repitan threads, por ejemplo: en la imagen que puse se ven dos threads que han recibido 2 respuestas cada uno, lo que quiero hacer es que sólo aparezca la última respuesta enviada pero que sigan listándose las 10 últimas respuestas.

Parece que es un poco difícil de explicar pero por ahí va la idea, gracias de antemano.
  #4 (permalink)  
Antiguo 01/09/2008, 20:00
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ordenando posts por última respuesta

Puedes usar GROUP BY para agrupar los elementos por campo:

Código PHP:
$query mysql_query("
    SELECT
        fr.id_post, 
        fr.titulo, 
        fr.categoria, 
        fr.seccion, 
        fc.id_rpta, 
        fc.id_post, 
        UNIX_TIMESTAMP (fc.fecha) AS fechas, 
        fc.idautor, 
        fc.autor 
    FROM 
        foros fr, 
        fororesp fc 
    WHERE 
        fr.id_post = fc.id_post
        AND fr.seccion<>'Zona X' 
    GROUP BY
        fc.id_post
    ORDER BY 
        fc.fecha DESC 
    LIMIT 0, 10
"
) or die(mysql_error()); 
Saludos,
  #5 (permalink)  
Antiguo 01/09/2008, 20:55
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Hice eso de agregar GROUP BY pero me devuelve la primera respuesta enviada, esoy haciendo algo mal?, porque estoy tratando de ordenar para que aparezca la ultima respuesta pero no lo consigo, gracias por la ayuda okram.

Saludos.
  #6 (permalink)  
Antiguo 01/09/2008, 21:08
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ordenando posts por última respuesta

De que tipo es tu campo fc.fecha? Prueba ordenando por fechas

Saludos,
  #7 (permalink)  
Antiguo 01/09/2008, 21:15
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Cita:
Iniciado por okram Ver Mensaje
De que tipo es tu campo fc.fecha? Prueba ordenando por fechas
El tipo de campo es DATETIME, he intentado ordenar por fechas pero devuelve lo mismo
  #8 (permalink)  
Antiguo 01/09/2008, 21:29
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ordenando posts por última respuesta

Qué extraño. Lo estoy probando así como te lo puse y funciona todo bien. El valor de fechas es el que esperas? Podría ser que la función UNIX_TIMESTAMP esté devolviendo un valor incorrecto. Si tus campos id tienen la propiedad AUTO_INCREMENT podrías intentar ordenar tus resultados usandolo (ORDER BY fc.id_rpta DESC)

El problema aquí es de bases de datos, así que en el respectivo subforo de MySQL encontrarás más ayuda.

Saludos,
  #9 (permalink)  
Antiguo 01/09/2008, 22:09
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Claro, el valor de fechas es el que espero, he intentado ordenas los resultados por fechas y por la id de las respuestas pero sigue en lo mismo , gracias por tu ayuda, veré qué me dicen en el otro subforo, si encuentras alguna otra manera de solucionarlo, te lo agradeceré.
  #10 (permalink)  
Antiguo 02/09/2008, 02:45
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 7
Respuesta: Ordenando posts por última respuesta

prueba

$query = mysql_query("SELECT DISTINCT fr.id_post, fr.titulo, fr.categoria, fr.seccion, fc.id_rpta, fc.id_post, UNIX_TIMESTAMP(fc.fecha) AS fechas, fc.idautor, fc.autor FROM foros fr, fororesp fc WHERE fr.id_post = fc.id_post AND fr.seccion<>'Zona X' ORDER BY fc.fecha DESC LIMIT 0, 10") or die(mysql_error());
  #11 (permalink)  
Antiguo 02/09/2008, 08:19
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Tampoco funcionó, gracias de todas maneras, si alguien tiene otra propuesta se la agadeceré :)

Saludos.
  #12 (permalink)  
Antiguo 02/09/2008, 08:22
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Ordenando posts por última respuesta

ORDER BY DESC solamente trayendo la ID en una consulta, luego en el while donde estas haciendo eso de cojer la id, haces la consulta cno todos los datos del post y lo muestras.
me hice entender??
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #13 (permalink)  
Antiguo 02/09/2008, 08:25
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: Ordenando posts por última respuesta

Hi !

Según lo que dices la solución que dieron con "DISTINCT" deberia funcionar, lo que necesitas es que se seleccionen los resultados pero que distinga entre los ID's de POST, o sea, si hay 2 Posts con el mismo ID deberia empezar uno solo.

Me parece que no es lo unico mal esa consulta, ya que, como dije anteriormente el DISTINCT habria funcionado.

Hay algo más que debe estar fallando.

-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #14 (permalink)  
Antiguo 02/09/2008, 08:30
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Ordenando posts por última respuesta

mmm por q un post con ddos id iguales???
no creo que sea buena idea.
las ID deben ser unicas!! por eso son ID
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #15 (permalink)  
Antiguo 02/09/2008, 08:36
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: Ordenando posts por última respuesta

Hi !

Parece que no entendiste... Dices que lo que actualmente lo que muestra es más de 1 vez un post... O sea... Muestra 2 veces el mismo POST, si son el mismo post entonces deben tener el mismo ID, y si tienen el mismo ID entonces el DISTINCT arreglaria el problema.

-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #16 (permalink)  
Antiguo 02/09/2008, 08:37
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Logicamente, las ID son únicas, nunca se repiten, ambas tablas (foros y fororesp) se relacionan por el campo id_post que es PRIMARY KEY en la tabla "foros" y la tabla fororesp también tiene un campo llamado id_rpta que nunca se repite y tambien es PRIMARY KEY.

En la primera ayuda que me dio okram, funcionó a medias y digo a medias porque en lugar de devolver la ultima respuesta devolvía las primeras respuestas de los últimos 10 threads respondidos, no sé si me dejo entender.
  #17 (permalink)  
Antiguo 02/09/2008, 08:48
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 16 años, 5 meses
Puntos: 75
Respuesta: Ordenando posts por última respuesta

mria pienso que si haces una consulta con los id de los post ordenadamente de mayor a menor (ya que me supongo que el campo id se autoincrementa) entonces ya puedes cojer los otros datos del port cuando ID=id()esta ultima id es la de la consulta que hiciste ordenadamente) y luego los muestras.
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #18 (permalink)  
Antiguo 02/09/2008, 09:01
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Claro, las id se autoincrementan, he intentado también ordenarlos por la id de mayor a menor pero sigue sin funcionar
  #19 (permalink)  
Antiguo 02/09/2008, 10:03
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Ordenando posts por última respuesta

Prueba de esta manera:
Código PHP:
$query mysql_query("
    SELECT
        (Select MAX(fecha) FROM fororesp WHERE  id_post = fc.id_post),        
        fr.id_post, 
        fr.titulo, 
        fr.categoria, 
        fr.seccion, 
        fc.id_rpta, 
        fc.id_post, 
        UNIX_TIMESTAMP (fc.fecha) AS fechas, 
        fc.idautor, 
        fc.autor 
    FROM 
        foros fr, 
        fororesp fc 
    WHERE 
        fr.id_post = fc.id_post
        AND fr.seccion<>'Zona X' 
    GROUP BY
        fc.id_post
    ORDER BY 
        fc.fecha DESC 
    LIMIT 0, 10
"
) or die(mysql_error()); 
Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #20 (permalink)  
Antiguo 02/09/2008, 10:53
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Ordenando posts por última respuesta

lo que debes de hacer tio es que en el select, distinga los tipos de categorias, es decir hacer el distinc para la categoria o en todo caso intenta agrupando tanto el codigo como la categoria.
GROUP BY
fc.id_post,
fr.categoria
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #21 (permalink)  
Antiguo 02/09/2008, 11:38
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Cita:
Iniciado por Genetix Ver Mensaje
Prueba de esta manera:
Código PHP:
$query mysql_query("
    SELECT
        (Select MAX(fecha) FROM fororesp WHERE  id_post = fc.id_post),        
        fr.id_post, 
        fr.titulo, 
        fr.categoria, 
        fr.seccion, 
        fc.id_rpta, 
        fc.id_post, 
        UNIX_TIMESTAMP (fc.fecha) AS fechas, 
        fc.idautor, 
        fc.autor 
    FROM 
        foros fr, 
        fororesp fc 
    WHERE 
        fr.id_post = fc.id_post
        AND fr.seccion<>'Zona X' 
    GROUP BY
        fc.id_post
    ORDER BY 
        fc.fecha DESC 
    LIMIT 0, 10
"
) or die(mysql_error()); 
Saludos!
Esta consulta satura la página, gracias de todas maneras :)
  #22 (permalink)  
Antiguo 02/09/2008, 12:11
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Ordenando posts por última respuesta

Por fin pude solucionarlo con la ayuda que me dió el amigo Jurena en este post. Gracias a todos por su ayuda.

Saludos
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 17:30.