Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajomy znajomego w PHP/MySQL?

Odpowiedź jest taka, że ​​nie dokonują wyborów w tabeli znajomych, najprawdopodobniej używają zdenormalizowanej tabeli zdarzeń wiadomości. Wdrożyliśmy kanał informacyjny podobny do Facebooka na DoInk.com, oto jak to zrobiliśmy:

Istnieje pojęcie „NewsEvent”, które ma typ, inicjator (identyfikator użytkownika) i użytkownika docelowego (również identyfikator użytkownika). (Możesz również mieć dodatkowe kolumny dla innych właściwości związanych z wydarzeniem lub dołączyć do nich)

Gdy użytkownik publikuje coś na tablicy innego użytkownika, generujemy takie zdarzenie:

INSERT INTO events VALUES (wall_post_event, user1, user1)

Przeglądając profil użytkownika 1, należy wybrać dla wszystkich zdarzeń, w których użytkownik 1 jest inicjatorem lub celem. W ten sposób wyświetlasz kanał profilu. (Możesz wymyślić i odfiltrować zdarzenia w zależności od modelu prywatności. Możesz rozważyć zrobienie tego w pamięci ze względu na wydajność)

Przykład:

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

Jeśli chcesz zobaczyć kanał wiadomości dla wszystkich wydarzeń w odniesieniu do Twoich znajomych, możesz wykonać zapytanie, wybierając dla wszystkich wydarzeń, w których inicjator znajduje się w Twoim zestawie znajomych.

Unikaj implementacji z podwyborami, w zależności od złożoności nie będą się skalować.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importowanie danych z bazy danych MySQL do ramki danych Pandas, w tym nazw kolumn

  2. Awaria usługi XAMPP MySQL po ponownym uruchomieniu

  3. Zapobieganie wstrzykiwaniu SQL na stronie logowania w PHP

  4. sprzężenie wewnętrzne i gdzie wydajność klauzuli in()?

  5. MySQL/InnoDB i długotrwałe zapytania