Estrutura do banco de dados para o Twitter Home/Facebook Wall?
-
22-09-2019 - |
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 :()
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.