사용자가 모든 활동을 기록하는 MYSQL '활동'테이블이 있습니다. 사용자의 활동이 질문을하거나 질문에 답변 할 수 있다고 가정 해 보겠습니다. 따라서 사용자가 질문을하면 질문이 '질문'표에 놓이고 활동도 '활동'표에 놓입니다. 응답이 'answers'테이블과 'activity'테이블로 이동한다는 점을 제외하면 사용자가 응답을 제공하는 경우와 동일합니다.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이있는 질문 및 답변 테이블에서 직접 쿼리를 수행해야한다고 생각합니까? 이 결정에 대한 의견 및 쿼리에 대한 의견은 있습니까?
SELECT *
FROM activity
LEFT JOIN question ON activity.q_id = question.q_id
LEFT OUTER JOIN answers ON activity.q_id = answers.q_id
WHERE activity.user_id = :user_id
ORDER BY activity.a_id desc
나는 모든 q_id 값이 있으리라 믿고있어 : 당신은 외부를 사용할 수
작동하지 않는 것 같습니다. 너무 많은 중복과 불일치하는 답변 및 질문을 돌려줍니다. 이것이 왜 그런지 확실하지 않습니다. 예, 활동의 모든 q_id는 반드시 응답 테이블에있는 것은 아니지만 질문 테이블에 해당 행을 갖습니다. 표시 할 각 행에 대해 활동 유형 (질문 또는 응답)을 먼저 표시 할 수 있어야하며, 질문보다 질문에 표시해야하는 경우 활동 유형을 응답으로 표시 할 수 있어야합니다. 질문 및 답변도 포함됩니다. – Cbomb
내가 그것을 보았을 때 나는 무엇인가 궁금했다. 문제는 활동 표에서 q_id 필드 만 있기 때문에 데이터베이스에서 어떤 응답이 어떤 활동과 연관되는지 알 수 없다는 것입니다. 따라서 질문에 대한 모든 활동에 대해 질문에 대한 모든 대답을 다시 가져옵니다. 문제를 해결하는 방법으로 내 대답을 수정하겠습니다. –
몇 줄의 작은 스케일 테스트에서 완벽하게 작동했습니다. 내일 나는 그것을 나의 전체 데이터베이스에 적용 할 것이고 잘하면 여전히 작동 할 것이다. 어디로 가야할지 모르는 답으로 문제를 깨달았어야합니다. – Cbomb