Pergunta

Basicamente, um feed ao vivo de todos os posts recentes de todos os seus amigos.

Em um tipo estúpido de abordagem, acho que começaria construindo uma consulta como:

SELECT * FROM tblposts WHERE userid=FIED_ID_1OR userid=FIED_ID_2...... e assim por diante

Onde Friend_Id_% é o usuário do usuário de um amigo da sua lista de amigos. Mas essa deve ser uma maneira muito ineficiente de fazê -lo, certo? Existe alguma maneira mais rápida de fazer isso no MySQL? Talvez algum esquema de banco de dados inteligente?

(Eu sei que o FB usa Hadoob, mas não tenho experiência o suficiente para ir tão longe :()

Foi útil?

Solução

Se você tiver uma lista de IDs que deseja consultar, deve usar:

SELECT * FROM tblposts WHERE userid IN (friend_id_1, friend_id_2, ...)

Mas, neste caso, acho que você pode usar uma junção.

SELECT * FROM tblposts AS T1
JOIN (
   SELECT friendid             -- I just made up this query.
   FROM friends                -- You need to replace it with the
   WHERE userid = 'youruserid' -- real query to get someone's friends.
) AS T2
ON T1.userid = T2.friendid

Outras dicas

Desculpe bater, mas acho que a consulta acima implica que o friends Tabela tem muitos registros redundantes? (x é amigo de y, y é amigo de x; 2 registros?)

Se friends A tabela tem campos sender_id receiver_id e request_status Em vez disso, a consulta acima pode ser modificada de uma maneira que retorne a lista de amigos contra youruserid, ou seja, selecione Valor de Receiver_ID se sender_id == YourUserID e vice -versa, para que obtemos uma lista de todos os amigos de youruserid? Não consigo pensar em uma tabela melhor para evitar duplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top