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

Приятел на приятел в PHP/MySQL?

Отговорът е, че те не правят избор на таблица за приятели, а най-вероятно използват денормализирана таблица за новини. Внедрихме емисия за новини, подобна на Facebook на DoInk.com, ето как го направихме:

Има понятието "NewsEvent", то има тип, инициатор (идентификатор на потребител) и целеви потребител (също потребителски идентификатор). (Можете също да имате допълнителни колони за други свойства, свързани със събитието, или да се присъедините към тях)

Когато потребител публикува нещо на стената на друг потребител, ние генерираме събитие като това:

INSERT INTO events VALUES (wall_post_event, user1, user1)

Когато преглеждате профила на user1, ще изберете за всички събития, при които user1 е или инициатор, или цел. Така показвате емисията на профила. (Можете да получите фантастични и да филтрирате събития в зависимост от вашия модел на поверителност. Може да помислите да направите това в паметта от съображения за производителност)

Пример:

SELECT * FROM events WHERE initiator = user1 or target = user1 //to see their profile feed

SELECT * FROM events WHERE initiator IN (your set of friend ids) //to see your newsfeed

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

Избягвайте реализации с подселекции, в зависимост от сложността, те няма да се мащабират.



  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 и PHP

  2. MySQL Как да INSERT INTO таблица с подзаявка SELECT, връщаща няколко реда?

  3. Как да добавите дата и час към INSERT чрез PHP с mySQL?

  4. Използване на индекса за търсене на Solr като база данни - това грешно ли е?

  5. брои без група