Control de post leidos en Foro PHP

java

nas gente,

tengo mis foros en php, con registro de usuarios (base de datos Mysql), y uso tambien kukis.
la historia es... del modo más efiectivo y rápido, como puedo controlar que cada usuario sepa qué hilos ha leido y cuales no??

Metiendo en kukis los ID de los post Leidos... me parece muy bestia

Metiendo en Base de datos.... me parece muy lento, habría que meter un array con los ID leidos... y recorrerlo... en el foro hay muuuuuuchos post. tardaría mucho.

No se me ocurre nada, alguna idea? como lo hace en los tipicos foros de PHPBB ?

Beavis

eso es algo que a mi también me interesa para estos foros, aún no he tenido tiempo de mirarlo a fondo pero así a botepronto la mejor opción que se me ocurre es guardar un array serializado ( serialize() / unserialize() ) en una cookie; guardarlo en la bd como tu dices sería muy bestia.
Bueno en la cookie no tienes pq guardar todos los topics, un margen de un par de días bastaría para que sea funcional, si además en ese mismo array añades la fecha en que el usuario leyó ese topic puedes discriminar los topics leidos con posts nuevos o sin posts nuevos etc, que es lo más útil del asunto.

espero que te haya ayudado de algo

Whose

Probad a postear en el foro de www.php-hispano.net alli hay gente que sabe bastante de PHP y con imaginacion xD

java

pues sí, aunque lo malo, en mi caso, es que mi web es de una universidad, por lo que la gente que se logea, no suele tener un cookie "estables", sino que es nueva cada vez...

En cualquiera de los casos, se podría hacer un array marcando los mensajes leidos por intervalos, así ahorras mucha info. por ejemplo

ID's leidos... [0-556][558][560-700]

por lo que 557 y 559 están sin leer. Así se puede ahorrar mucho.

Lo único, que eso valdría si los ID son consecutivos y no falta ninguno en medio... bueno, pero por ahí andaría la cosa. así la kuki no es exagerada. (o la base de datos)

Beavis

hombre guardarlo en la base de datos te lo puedes plantear si tu base de datos va ligera y el volumen de uso de los foros es moderado, pero bueno, como todo, para salir de dudas haz la prueba y ponlo en práctica a ver que impacto tiene en la carga del mysql.

Lo de los rangos esta bien si vas a guardar ese dato solo, pero si quieres asociarle la fecha como quiero hacer yo, no puedes hacer eso, tal y como yo lo veo de que te sirve indicarle que el tema ya lo ha leido anteriormente si ese tema tiene posts nuevos desde su ultima visita.

PiradoIV

Supongo que lo interesante (lo que hace phpBB, por ejemplo) sería:

¿Hay nuevos post desde la última visita?
Sí: Si el post tiene más de n número de respuestas, se muestra el icono A; Si el post tiene pocas, se muestra el icono B.

No: Si el post tiene más de n número de respuestas, se muestra el icono C; Si el post tiene pocas, se muestra el icono D.

Lo que no tengo claro es cómo tienen organizada la base de datos, lo que sí que tengo claro es que no utilizan kukis para este tema.

Una posible solución supongo que sería crear una tabla que se llame visitas_foro con la estructura:

  • id
  • id_visitante
  • id_post
  • fecha

Si visitamos un post y el id_visitante y el id_post no existen, insertamos una nueva row en la bdd.

Si visitamos un post y el id_visitante y el id_post existen, actualizamos la fecha.

Ojo, la fecha supongo que debería ser en formato UNIX.

Saludos,
Pirado IV estuvo akí ;)

java

pff no se, pon 1000 usuarios, 10000 post en los foros, multiplica líneas de registro en bbdd.

y lo peor no es eso, sino que se va a buscar coincidencias en esos registros, cada vez que se listen los mensajes de los foros o se tenga que actualzar...
me parece mucho, aunque como dice Beavis, todo es probar...

Yo con lo de los rangos, lo veo bien, fijándote unicamente en las ID de los post padre, si se crea un nuevo hijo, quitas el ID padre de la lista de leidos y ya está.

Lo que no entiendo es para qué quieres las fechas... Un hilo, o está leido o no... no se si te compensa el que el usuario sepa qué dia se le marcó ese hilo como leido.

un saludo

PiradoIV

Hombre, puedes haber leído el post, pero pueden haber respuestas que no las hayas leído de una visita a otra, por eso lo de la fecha.

Supongo que un "SELECT * FROM visitas_foro WHERE id_visitante = $visitante[id] ORDER BY id DESC LIMIT 100" no se comería tanto la bdd, pero todo es probar.

Saludotes,
Pirado IV estuvo akí ;)

Usuarios habituales

  • PiradoIV
  • java
  • Beavis
  • Whose