sql >> Databáze >  >> RDS >> Mysql

Přítel přítele v PHP/MySQL?

Odpověď je, že nevybírají na přátelském stole, s největší pravděpodobností používají denormalizovanou tabulku událostí. Implementovali jsme zpravodajský kanál podobný Facebooku na DoInk.com, takto jsme to udělali:

Existuje pojem "NewsEvent", který má typ, iniciátora (ID uživatele) a cílového uživatele (také ID uživatele). (Můžete mít také další sloupce pro další vlastnosti relevantní pro událost nebo se k nim připojit)

Když uživatel něco zveřejní na jiné uživatelské zdi, vygenerujeme událost jako je tato:

INSERT INTO events VALUES (wall_post_event, user1, user1)

Při prohlížení profilu uživatele1 byste vybrali pro všechny události, kde je uživatel1 iniciátorem nebo cílem. Takto zobrazíte profilový kanál. (V závislosti na modelu ochrany osobních údajů si můžete události vyzdobit a odfiltrovat je. Z důvodu výkonu to můžete zvážit v paměti.)

Příklad:

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

Když chcete vidět informační kanál pro všechny události související s vašimi přáteli, můžete provést dotaz a vybrat všechny události, kde je iniciátor ve vaší skupině přátel.

Vyhněte se implementacím s dílčími výběry, v závislosti na složitosti se nebudou škálovat.



  1. Jak získat data z databáze mysql

  2. Odečítání dat v Oracle – datový typ čísla nebo intervalu?

  3. Hibernate odesílání nadbytečných dotazů do databáze

  4. ORA-12154 nedokázal vyřešit zadaný identifikátor připojení