Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Daniel-Lopes

Criação de um sistema de amizades

Recommended Posts

Pessoal estou numa duvida sobre a melhor maneira de criar um banco de dados para controle de amizade e e visibilidade de postagem.

 

Resumidamente:

 

 

Estou fazendo sistema onde irei gerar um feed com as postagens do usuários.

Basicamente como ocorre no feed de noticias do facebook assim eu preciso recuperar as postagens do usuário e seus amigos

 

Na minha tabela "posts" eu tenho alem dos contudos que é irrelevante informar tem um campo que se chama visibility, neste campo entra se 3 tipos de valores representando 3 modos (0 = todos, 1 = somente amigos, 2 somente eu)

 

 

Ja na tabela "friends" iguinorando os campos irrelevantes para a duvida eu tenho id_user, id_friend, status_friend.

 

Sendo estes

id_user = id do usuário,

id_friend = id do amigo

status_friend = campo que entra 4 tipos de valores (0- aguardando autorização / 1 - aguardando resposta / 2 - autorizado / 3 -não autorizado)

 

Só explicando os valores 0 / 1

0 é quando foi eu que RECEBI o pedido de amizade.

1 é quando foi eu que REALIZEI o pedido de amizade e estou aguardando resposta para que ele entre definitivamente na minha lista de amigos (status 2).

 

Quando se envia um pedido de amizade, é criado dois registro nesta tabela um o ID_USER será da pessoa a quem ESTÁ SENDO FEITO O PEDIDO e o STATUS_FRIEND será 0 e outro para a A PESSOA QUE ESTÁ REALIZANDO PEDIDO e neste o STATUS_FRIEND será 1.

 

 

No feed eu tenho que executar uma query com no minimo dois selects unidas por um UNION

 

Um select irá resgatar minhas postagens e o outro iria conter IF para verificar o status da amizade... mais ou menos assim:

 

 

SELECT
  `post`.`id_post`,
  `post`.`description`,
  `post`.`visibility`,
  `post`.`gmdate_ref`
  `user_profile`.`id_user`,
  `user_profile`.`last_name`,
  `user_profile`.`photo`
FROM
  `post`
  INNER JOIN `user_profile` ON `user_profile`.`id_user` = `post`.`id_user`
  INNER JOIN `user_profile` ON `users_link_friends`.`id_friend` = `post`.`id_user`
WHERE
  `users_link_friends`.`id_user_1` = 1 AND
  If(`users_link_friends`.`status_friend` = 2, `post`.`visibility` <= 1,
  `post`.`visibility` <= 0)


UNION


SELECT
  `post`.`id_post`,
  `post`.`description`,
  `post`.`visibility`,
  `post`.`gmdate_ref`
  `user_profile`.`first_name`,
  `user_profile`.`first_name`,
  `user_profile`.`last_name`,
  `user_profile`.`photo`
FROM
 `post`
  INNER JOIN `user_profile` ON `user_profile`.`id_friend` = `post`.`id_user`
WHERE
  `post`.`id_user` = '{MEU ID}'


ORDER BY
  `post`.`gmdate_ref` DESC
LIMIT 10;

 

Vocês acham que a logica está boa ou pode ser melhorada ???

Gostaria de receber sugestões para que no futuro se houver muitos acessos ao sistema estas consultas não sejam gargalos para um melhor desempenho do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.