我有一個MYSQL'活動'表,用戶的所有活動都被記錄下來。假設用戶的活動可以是提問或回答問題。因此,如果用戶提出問題,則他們的問題將被放入「問題」表中,並且該活動也會被放入「活動」表中。如果用戶提供了答案,除非答案進入「答案」表和「活動」表中,否則同樣的事情。將活動表與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在問題和答案表上執行查詢?對此決定有何意見,以及對查詢的任何想法?
似乎並不想工作。它返回的方式太多重複和不匹配的答案和問題。不知道爲什麼會這樣。是的,活動中的每個q_id在問題表中都有對應的行,但不一定在答案表中。對於要顯示的每一行,它應該能夠首先顯示活動類型(問題或答案),如果它的問題比它應該只顯示問題,並且如果類型是答案,它應該能夠顯示問題和答案。 – Cbomb
當我看到這件事時,我知道有什麼東西在困擾着我。問題是在活動表中,你只有q_id字段,所以數據庫無法知道哪個答案與哪個活動相關。因此,它將問題的每個答案帶回問題的每個答案。我將以我如何解決問題來編輯我的答案。 –
在我的小規模測試中,只用了幾行就完美了。明天我會將它應用到我的完整數據庫,並希望它仍然可以工作。應該已經意識到問題的答案不知道該去哪裏。 – Cbomb