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

表:活动

+ ---- + --------------- + --------- +
| id | activity_text | user_id |
+ ---- + --------------- + --------- +
| 1 |新增| 1 |
| 2 |新增| 1 |
+ ---- + --------------- + --------- +


表:activity_modules

     + ---- + ------------- +
     | id | module_name |
     + ---- + ------------- +
     | 1 |帖子|
     | 2 |评论|
     | 3 |用户|
     + ---- + ------------- +


表:activity_module_objects
+ ---- + ------------- + ----------- + -------------- + --- -------- +
| id | activity_id | module_id | display_text | object_id |
+ ---- + ------------- + ----------- + -------------- + --- -------- +
| 1 | 1 | 1 |新帖| 10 |
| 2 | 2 | 1 |新评论| 11 |
| 3 | 2 | 2 |上| 10 |
+ ---- + ------------- + ----------- + -------------- + --- -------- +


这里的活动表代表用户和活动。 user_id是来自用户表的外键。
而且activity_module_objects中的object_id代表ID为10的帖子等活动目标。这意味着在帖子10上发生了某些动作。

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

Anil添加了新帖子

Anil在帖子上添加了新评论

在每个活动中,“ Anil”,“ Comment”,“ Post”将具有链接。

Anil喜欢AnotherUser的视频野生动物

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

最佳答案

如果我理解正确,它将为您提供用户详细信息以及相关的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

10-08 13:06