Mysql
 sql >> Database >  >> RDS >> Mysql

Amico di un amico in PHP/MySQL?

La risposta è che non stanno facendo selezioni su una tabella degli amici, molto probabilmente stanno usando una tabella di eventi di notizie denormalizzata. Abbiamo implementato un feed di notizie simile a Facebook su DoInk.com, ecco come l'abbiamo fatto:

C'è la nozione di "NewsEvent" ha un tipo, un iniziatore (un ID utente) e un utente di destinazione (anche un ID utente). (Puoi anche avere colonne aggiuntive per altre proprietà rilevanti per l'evento o unirti a loro)

Quando un utente pubblica qualcosa sulla bacheca di un altro utente, generiamo un evento come questo:

INSERT INTO events VALUES (wall_post_event, user1, user1)

Durante la visualizzazione del profilo dell'utente1, selezionare per tutti gli eventi in cui utente1 è l'iniziatore o la destinazione. È così che visualizzi il feed del profilo. (Puoi divertirti e filtrare gli eventi a seconda del tuo modello di privacy. Potresti considerare di farlo in memoria per motivi di prestazioni)

Esempio:

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

Quando vuoi vedere il feed delle notizie per tutti gli eventi relativi ai tuoi amici, puoi fare una query selezionando tutti gli eventi in cui l'iniziatore si trova nel tuo gruppo di amici.

Evita le implementazioni con selezioni secondarie, a seconda della complessità, non verranno ridimensionate.