2016-01-18 1 views
0

У меня есть три таблицы для хранения данных, связанных с деятельностью, как показано ниже.SQL Query для генерации активности из хранимых данных таблицы

 
Table: activity 

+----+---------------+---------+ 
| id | activity_text | user_id | 
+----+---------------+---------+ 
| 1 | added   |  1 | 
| 2 | added   |  1 | 
+----+---------------+---------+ 
 
Table: activity_modules 

    +----+-------------+ 
    | id | module_name | 
    +----+-------------+ 
    | 1 | posts  | 
    | 2 | comments | 
    | 3 | users  | 
    +----+-------------+ 
 
Table: activity_module_objects 
+----+-------------+-----------+--------------+-----------+ 
| id | activity_id | module_id | display_text | object_id | 
+----+-------------+-----------+--------------+-----------+ 
| 1 |   1 |   1 | new post  |  10 | 
| 2 |   2 |   1 | new comment |  11 | 
| 3 |   2 |   2 | on post  |  10 | 
+----+-------------+-----------+--------------+-----------+ 

Здесь таблица активности представляет пользователя и активность. user_id - это внешний ключ из таблицы пользователей.
И object_id в activity_module_objects представляет цель деятельности, как пост с идентификатором 10. Это означает, что какое-то действие произошло на посту 10.

Мне нужен выход, как это, Всякий раз, когда я запрос с использованием user_id, позволяет сказать, что user_id = 1, {пользователь: {ID: 1, имя: 'Индиго'}}

Анил добавил новый пост

Анил добавил новый комментарий на пост

В каждой деятельности, 'Индиго', 'комментарий', " Post 'будет иметь ссылки.

Анилу понравился видео живой природы AnotherUser в

В этой деятельности, Анил, AnotherUser, Дикая жизнь будет иметь ссылки. Поэтому, используя user_id, мне нужно получить данные пользователя, используя module_id & object_id Мне нужно получить детали объекта. Например, если модуль является «VIDEO», мне нужно получить данные video_id (object_id из таблицы activity_module_objects) из таблицы videos. Если это какая-то другая вещь, например, событие, мне нужно получить данные event_id из таблицы events.

+0

Теперь, когда вы описали все ваши требования, сформулируйте ваш точный вопрос. –

+0

Пожалуйста, прочитайте [Какие темы я могу задать] (http://stackoverflow.com/help/on-topic) и [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to -ask) И [идеальный вопрос] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) SO ** - не бесплатное кодирование ** Вы должны показать, что вы приложили некоторые усилия для решения своей проблемы. – RiggsFolly

ответ

0

Если я правильно понял, он предоставит вам информацию о пользователе с соответствующим именем object_id и именем модуля.

SELECT u.*, 
     amo.object_id, 
     am.module_name 
FROM USER u 
LEFT JOIN activity a ON a.user_id = u.id 
INNER JOIN activity_modules_object amo ON a.id = amo.activity_id 
INNER JOIN activity_modules am ON am.id = amo.module_id 

 Смежные вопросы

  • Нет связанных вопросов^_^