SQL Query从存储的表数据生成活动

时间:2016-01-18 22:51:45

标签: mysql dynamic-sql listactivity

我有三个表用于存储活动相关数据,如下所示。

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是来自users表的外键 activity_module_objects中的object_id表示活动目标,如id为10的帖子。这意味着在10后发生了一些操作。

我需要这样的输出,每当我使用user_id查询时,可以说user_id = 1,{user:{id:1,name:' Anil'}}

Anil添加了新帖子

Anil在帖子上添加了新评论

在每项活动中,' Anil','评论''发布'会有链接。

Anil喜欢AnotherUser的视频野生生活

在此活动中,Anil,AnotherUser,Wild-life将有链接。因此,使用user_id我需要使用module_id&获取用户详细信息。 object_id我需要获取对象详细信息。就像模块是' VIDEO'一样,我需要从videos表中获取video_id(来自activity_module_objects表的object_id)数据。如果是其他事情,例如,事件,我需要从events表中获取event_id详细信息。

1 个答案:

答案 0 :(得分: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