2017-03-12 36 views
-1

我有一個表(MySQL)的一些職位,每個類別的「接收」一堆評論。如果您選擇了錯誤的類別,我以管理員身份可以更改它,所以我創建了一個表格作爲一種「更新日誌」。選擇所有回覆的帖子及其更新

現在我想選擇一篇文章的評論和它的更新(類似「你的文章被改爲Category Something_1」)。

的表是:

POSTS: id | title | message | status | id_user | id_category | date 

POSTS_COMMENTS: id | id_post | comment_text | date 

POSTS_CHANGE_LOG: id | id_post | changed_to | date 

你能幫助我嗎?

+2

因此,給予一定的樣本數據,正好將你想要的結果數據集的樣子? –

+0

你已經嘗試過什麼來解決這個問題? –

+0

我假設,你想這是一個單一的查詢,對嗎? –

回答

0

假設後只能變更一次(即你有POST_CHANGE表有某些限制),可以使用下面的查詢:

SELECT p.id, p.id_category as "Original category", IFNULL(pcl.changed_to, p.id_category) as "New Category", pc.id as comment_id, pc.comment_text, pc.date 
FROM posts p LEFT JOIN posts_change_log pcl ON p.id = pcl.id_post 
JOIN posts_comments pc ON p.id = pc.id_post 
WHERE p.id = ? 

如果信息可以改變多次,那麼最好返回/展後的歷史和在單獨的查詢註釋,例如:

SELECT p.id, p.id_category as "Original category", pc.changed_to as "New Category" 
FROM post p JOIN posts_change_log pcl 
ON p.id = pcl.id_post 
WHERE p.id = ? 


SELECT * 
FROM posts_comments 
WHERE id_post = ? 

更新

ŧ Ø結合兩個輸出,你可以使用UNION ALL運營商,例如:

SELECT comment_text, date, "comment" as "type 
FROM posts_comments 
WHERE id_post = ? 

UNION 

SELECT changed_to, date, "change" as "type" 
FROM post_change_log 
WHERE id_post = ? 

ORDER BY date; 
+0

它可以多次更改......但我也想按日期排序評論和更改日誌。 想要這樣: 評論1 ------------------------------- 更改爲category_2 ----- -------------------------- 評論2 –

+0

您可以在上述查詢中使用'ORDER BY'來排序記錄。如果可以有多個更新,那麼'JOIN'將返回MxN個記錄,其中M是更新次數,N是註釋數量。你可以發佈一個exened輸出的例子嗎? –

+0

我想要的輸出完全是這樣的: https://imageshack.us/i/poQC4fttp –