SQL-запрос для чтения потока пользователя - PullRequest
0 голосов
/ 28 марта 2012
CREATE TABLE `social_activity_stream` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `social_actor_id` int(11) NOT NULL,
  `social_activity_id` bigint(20) NOT NULL,
  `social_activity_type_id` int(11) NOT NULL,
  `social_share_policy_id` int(11) DEFAULT NULL,
  `social_user_friend_id` bigint(20) DEFAULT NULL,
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date_read` datetime DEFAULT NULL,
   PRIMARY KEY (`id`))

Каждый социальный актер создает социальную активность с политикой обмена. ОБЩЕСТВЕННЫЕ, ЧАСТНЫЕ, ДРУЗЬЯ Допустим, есть 3 актера: A, B, C Они друзья

Деятельность, которой А поделился сFRIENDS (политика) создаст 3 строки в таблице:

  • Одна для A [A, POST ТЕКСТА, FRIENDS, NULL]
  • Одна для B [B, A TEXT POST, ДРУЗЬЯ, A-> B]
  • Один для C [C, ТЕКСТ ПОСТ, ДРУЗЬЯ, A-> C]

B хочет просмотреть поток активности A: Вотпсевдопросмотр:

  • ПОЛУЧЕНИЕ ОБЩЕСТВЕННОЙ ДЕЯТЕЛЬНОСТИ по потоку A '
  • ПОЛУЧЕНИЕ ЧАСТНОЙ ДЕЯТЕЛЬНОСТИ по A'stream с FriendId = A-> B
  • ПОЛУЧЕНИЕ ДЕЯТЕЛЬНОСТИ ДРУЗЕЙ поA'stream, но только если эта активность существует в потоке B (в противном случае это может быть для друга D из A, который не является другом B)

Есть идеи, что это можно сделать в одном запросе?

1 Ответ

0 голосов
/ 30 марта 2012

Да, это было просто. Бедный вопрос действительно.

SELECT a.*
from social_activity_stream a INNER JOIN social_activity_stream b USING(social_activity_id) WHERE 
a.social_actor_id = [user_id] and b.social_actor_id = [friend_id]; 
...