Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare un sistema di amici come Facebook in php con mysql

Lista amici dell'utente 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';

L'utente 123 è un fan di questi utenti:

SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';

Non dimenticare di aggiungere l'indice nella colonna di stato.

Inoltre, non sono sicuro che un tavolo come questo sia l'ideale per questo.

MODIFICA:

Probabilmente sceglierei uno schema come questo:

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 qualcuno fa una richiesta di amicizia, aggiungi una nuova riga alla tabella friend_request. Quando il destinatario della richiesta sceglie di:

  • per accettare la richiesta:aggiungi nuova riga a friend_xref e imposta risolto a 1 nella tabella friend_request
  • per negare la richiesta:aggiungi una nuova riga a fan_xref e imposta risolto a 1 nella tabella friend_request

Ma sarebbe meglio chiedere questo sotto mysql, database-design o qualche tag simile per ottenere le migliori risposte.