Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създадете Facebook като приятели система в php с mysql

Списък с приятели на потребител 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';

Потребител 123 е фен на тези потребители:

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

Не забравяйте да добавите индекс към колоната за състоянието.

Освен това не съм сигурен, че маса като тази е идеална за това.

РЕДАКТИРАНЕ:

Вероятно бих избрал схема като тази:

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)

Когато някой направи заявка за приятелство, добавете нов ред към таблицата friend_request. Когато получателят на заявката избере да:

  • за да приемете заявката:добавете нов ред към friend_xref и задайте resolved на 1 в таблицата friend_request
  • за да отхвърлите заявката:добавете нов ред към fan_xref и задайте resolved на 1 в таблицата friend_request

Но би било по-добре да попитате това под mysql, database-design или някакъв подобен таг, за да получите най-добри отговори.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ограничение на външния ключ на MySQL – Целочислена колона

  2. mysql_close():5 не е валиден ресурс на MySQL-Link в C:\wamp\www\Includes\footer.php на ред 4

  3. MYSQL заявка за търсене във ВСИЧКИ полета?

  4. Дизайн на база данни:как да поддържаме многоезичен сайт?

  5. Сравняване на двоични стойности в MySQL