2013-07-09 148 views
0

我有一個典型的MySQL數據庫爲此設置:張貼表,用戶表,評論表。通過新評論獲得我評論過的帖子?

什麼是最好的方式來查詢諸如「我發表評論,自從我上次評論以來有新評論」的帖子?我無法到達瞭如何合併其他用戶comment_timestamp比我comment_timestamp條件高到下面的查詢:

我有大約

SELECT * FROM posts 
WHERE posts.id IN 
(SELECT DISTINCT posts.id FROM posts,users,comments WHERE comments.post_id = post.id AND comments.user_id = $current_user_id) AND .. something to filter only comments where timestamp is greater than mine 

我知道我可以遍歷一組和過濾外界的MySQL,但我希望儘可能在MySQL中完成。我知道可能有一個更好的方式與加入要做到這一點,但我失去了對如何移動comment_timestamp爲「我的」最後評論的兩部分之間加入

user table 
----- 
id 

posts table 
------ 
id 
user_id 

comments table 
------- 
id 
user_id 
post_id 
comment_timestamp 
+1

請在您的問題中提供一些數據。 –

+0

輸入以及輸出數據。 –

回答

1
SELECT DISTINCT p.* 
FROM posts p 
INNER JOIN comments c 
ON c.post_id = p.id 
WHERE c.comment_timestamp > (
    SELECT MAX(c2.comment_timestamp) 
    FROM comments c2 
    WHERE c2.post_id = c.post_id 
    AND c2.user_id = $current_user_id 
) 

選擇發佈數據對於每個帖子有不同用戶創建的評論,其時間戳值大於當前用戶最近發表的評論。獨特包括只能獲得每個帖子一次,因爲一個帖子可能有多個評論後,當前用戶的最新。

SQL Fiddle.小提琴假定當前用戶的ID是100,並提供以下示例情況:

  • 一個帖子裏最近的評論是當前用戶的和其他用戶先前評論
  • 一個帖子在當前用戶評論等用戶事後評論
  • 在當前用戶還沒有評論過的訊息,但另一些
  • 一個帖子有沒有意見
  • 僅有來自當前用戶的評論的帖子