Panel de novedades como en Facebook

Iniciado por javirk, 7 Septiembre 2012, 08:42 AM

0 Miembros y 1 Visitante están viendo este tema.

javirk

Hola, llevo unos días pensando cómo hacer un panel de novedades como el que hay en Facebook, es decir, que te sale de cada persona lo que ha hecho últimamente y tal, pero no se me ocurre cómo puede estar hecho. ¿Alguna idea?

s00rk

Supongo que es algo que tu deseas hacer osea que no sea de facebook sino solo la idea de mostrar ultimas novedades, si es asi pues eso dependeria de 2 cosas que a mi parecer es a como facebook lo toma 1 es fecha de publicacion y otra el total de comentarios o likes que tiene esta entonces ya de ahi hacer una consulta mostrando y con ella misma ordenando de mayor a menor trascendencia.

Ejemplo sencillo
Tabla user
idUser
usuario

Tabla Publicaciones
idPub
idUser
Titulo
Fecha
Likes

Tabla Comentario
idCom
idPub
idUser
Comentario
Fecha

Y podria hacer una consulta algo como
SELECT a.Titulo, a.idUser, b.Comentario, b.idUser FROM Publicaciones a INNER JOIN Comentario b ON a.idPub = b.idPub Order by a.Fecha DESC, a.Likes DESC, b.Fecha

Bueno ahi seria algo sencillo ya tambien se podria agregar que muestre u ordene por la publicacion con mas comentarios o algo asi hehe xP

javirk

Hola, gracias a los dos por responder. Y sí, me refería a lo que dice s00rk, pero ¿y si además de comentarios quieres coger de otra tabla de amigos? ¿Crees que harán otra consulta distinta?, es decir, una para los comentarios y otra para los amigos?

Gracias y un saludo!

s00rk

pues de amigos ya tendrias una tabla llamada emm

Amigos
idAmigo
idUser1
idUser2

y ya solo buscar o agregar en la consulta
WHERE idUser1 = useractual OR idUser2 = useractual

donde useractual es el id del usuario actualmente conectado, bueno espero darme a enatender xp

javirk

Pero es que creo que eso no es del todo eficiente, tienes que hacer mínimo dos consultas por usuario, así que si muestras 10 usuarios tienes que hacer 20 consultas antes de cargar la página, yo creo que es demasiado, no?

Gracias!

s00rk

No, con una consulta bastaria, tomando como ejemplo las tablas que he puesto anteriormente, para mostrar las publicaciones con mas Likes, de amigos tuyos seria asi:

SELECT a.Titulo, a.idUser, b.Comentario, b.idUser FROM Publicaciones a INNER JOIN Comentario b ON a.idPub = b.idPub WHERE EXISTS (SELECT c.idAmigo FROM Amigos c WHERE (c.idUser1 = $userid AND c.idUser2 = a.idUser) OR (c.idUser2 = $userid AND c.idUser1 = a.idUser)) Order by a.Likes DESC

Bueno pues algo asi seria la consulta, solo ahi pues cambiar lo de $userid, por el id del usuario logueado actualmente xP, ya con eso deberia mostrarte publicaciones de solo los amigos del que esta logueado

javirk

Anda, pues tienes razón, gracias. No había usado nunca lo de WHERE EXISTS y ni lo había pensado jaja

Un saludo!