Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar o Facebook como sistema de amigos em php com mysql


Lista de amigos do usuário 123:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.user_id = 123 AND status = 'accepted';

O usuário 123 é fã desses usuários:
SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';

Não se esqueça de adicionar o índice na coluna de status.

Além disso, não tenho certeza se uma mesa como esta é ideal para isso.

EDITAR:

Eu provavelmente escolheria um esquema como este:
friend_request
    request_from (foreign key to users.user_id)
    request_to (foreign key to users.user_id)
    resolved (boolean 1 or 0, default is 0)

friend_xref
    friend (foreign key to users.user_id)
    is_friend_with (foreign key to users_user_id)

fan_xref
    user (foreign key to users.user_id)
    is_fan_of (foreign key to users.user_id)

Quando alguém faz uma solicitação de amizade, adicione uma nova linha à tabela friend_request. Quando o destinatário da solicitação opta por:
  • para aceitar a solicitação:adicione uma nova linha a friend_xref e defina resolvido como 1 na tabela friend_request
  • para negar a solicitação:adicione uma nova linha a fan_xref e defina resolvido como 1 na tabela friend_request

Mas seria melhor perguntar isso em mysql, database-design ou alguma tag semelhante para obter as melhores respostas.