sql >> Base de Datos >  >> RDS >> Mysql

¿Amigo de un amigo en PHP/MySQL?

La respuesta es que no están haciendo selecciones en una tabla de amigos, lo más probable es que estén usando una tabla de eventos de noticias no normalizada. Implementamos una fuente de noticias similar a Facebook en DoInk.com, así es como lo hicimos:

Existe la noción de un "Evento de noticias" que tiene un tipo, un iniciador (una identificación de usuario) y un usuario de destino (también una identificación de usuario). (También puede tener columnas adicionales para otras propiedades relevantes para el evento, o unirse a ellas)

Cuando un usuario publica algo en el muro de otro usuario, generamos un evento como este:

INSERT INTO events VALUES (wall_post_event, user1, user1)

Al ver el perfil del usuario 1, seleccionaría para todos los eventos en los que el usuario 1 sea el iniciador o el objetivo. Así es como se muestra el feed de perfil. (Puede volverse elegante y filtrar eventos según su modelo de privacidad. Puede considerar hacer esto en la memoria por motivos de rendimiento)

Ejemplo:

SELECT * FROM events WHERE initiator = user1 or target = user1 //to see their profile feed

SELECT * FROM events WHERE initiator IN (your set of friend ids) //to see your newsfeed

Cuando desee ver el suministro de noticias de todos los eventos relacionados con sus amigos, puede hacer una consulta seleccionando todos los eventos en los que el iniciador se encuentra en su grupo de amigos.

Evite las implementaciones con subselecciones, ya que, según la complejidad, no escalarán.