我有一个 MYSQL 的“活动”表,其中记录了用户的所有活动。假设用户的活动可以是提出问题或回答问题。因此,如果用户提出问题,他们的问题会被放入“问题”表中,并且活动也会被放入“活动”表中。如果用户提供答案,则相同,除了答案进入“答案”表和“活动”表。
问题表的字段是:
q_id question
答案表的字段是:
a_id q_id answer
活动表的字段是:
activity_id q_id user_id action_type
(上面显示的列更多,但这些说明了这一点。)
我想要做的是显示用户最近在网站上的操作,并实际显示操作是什么。
我当前的 MYSQL 查询只是将活动表与问题表连接起来,如下所示(使用 PDO):
"SELECT *
FROM activity
LEFT JOIN question ON activity.q_id = question.q_id
WHERE activity.user_id = :user_id
ORDER BY activity.a_id desc"
这可以正常工作,并且总是可以给我在活动列表中显示的问题。但是,如果返回的活动是答案,我也希望能够显示答案。我尝试只使用三重连接,如下所示:
"SELECT *
FROM activity
LEFT JOIN question ON activity.q_id = question.q_id
LEFT JOIN answers ON activity.q_id = answers.q_id
WHERE activity.user_id = :user_id
ORDER BY activity.a_id desc"
但这只是给了我一个比第一个查询长两倍的行列表,并且当 action_type 是答案时不显示答案。
我认为这应该是可能的,但是我想得越多,我相信也许我应该废弃活动表并直接在问题和答案表上执行查询并使用 UNION?对这个决定有什么意见,对查询有什么想法?