ユーザーによるすべてのアクティビティがログに記録されるMYSQLの「アクティビティ」テーブルがあります。ユーザーのアクティビティは、質問をすることも、質問に答えることもできるとしましょう。したがって、ユーザーが質問をすると、その質問は「質問」テーブルに入れられ、アクティビティも「アクティビティ」テーブルに入れられます。ユーザーが回答を提供した場合も同じですが、回答が「answers」テーブルと「activity」テーブルに入る点が異なります。
質問テーブルのフィールドは次のとおりです。
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"
ただし、これにより、最初のクエリの2倍の長さの行のリストが表示され、action_typeが回答の場合は回答が表示されません。
これは可能だと思いますが、考えれば考えるほど、アクティビティテーブルを破棄して、UNIONを使用して質問と回答のテーブルに対して直接クエリを実行する必要があると思います。この決定についての意見、および質問についての考えはありますか?