2010-08-02 6 views
0

Je veux créer un système d'amis comme Facebook, bien assez bizarre que cela. Quand un utilisateur ajoute quelqu'un, celui-ci sera averti, s'il est d'accord, alors ils seront des amis communs (dans ce cas, signifiant que les deux parties sont des amis, littéralement) ou si quelqu'un laisse la demande sans réponse, ils deviendront fans du Quelqu'un. Quelqu'un rejette la demande, ils ne seront plus fan ni amis.Comment créer Facebook comme système d'amis en php avec MySQL

Comment faire en PHP Mysql. Voici ma planification initiale, en quelque sorte je ne suis pas sûr que ce sera la meilleure façon de le faire.

MYSQL TABLEAU

user_id (request made by) | friend_id (request point towards) | status 
-------------------------------- 
123  | 452  | 'waiting' 
525  | 123  | 'waiting' 

Signification utilisateur 123 ont 1 demande d'ami de 525, et a fait la demande 1 ami à 452. Le problème ici est de savoir comment Im va obtenir la liste d'amis de l'utilisateur 123? si l'utilisateur 123 accepte la demande de 525 et l'utilisateur 452 accepte la demande de 123. Et aussi comment obtenir la liste des fans par MYSQL QUERY..et comment obtenir des amis d'un ami?

+0

J'ai mis à jour ma réponse. –

Répondre

3

Liste d'amis de l'utilisateur 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'; 

utilisateur 123 est fan de ces utilisateurs:

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

Ne pas oublier d'ajouter l'index sur la colonne d'état.

Aussi, je ne suis pas sûr d'une table comme celui-ci est idéal pour cela.

EDIT:

je choisirais probablement un schéma comme celui-ci:

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) 

Quand quelqu'un fait une demande d'ami, ajouter une nouvelle ligne à friend_request table. Lorsque le destinataire de la demande choisit de:

  • d'accepter la demande: ajouter une nouvelle ligne à friend_xref et ensemble résolu à 1 dans le tableau friend_request
  • de refuser la demande: ajouter une nouvelle ligne à fan_xref et ensemble résolu à 1 dans la table friend_request

Mais il serait préférable de demander cela sous mysql, design de base de données ou un tag similaire pour obtenir les meilleures réponses.

+0

alors qu'est-ce que vous pensez qui ferait de cette chose idéale pour cela? Je ne suis pas si sûr de toute façon – kornesh

1

Probablement préférable de créer une table 'status' puis d'utiliser aussi une clé étrangère dans la colonne d'état :)

+0

oui merci de me le rappeler, je voudrais, mais pour simplifier ma question, je viens d'utiliser des chaînes à la place des clés – kornesh

Questions connexes