2013-08-30 73 views
0

我這有一張桌子用戶:查看哪些文章用戶已經觀看

id INT PRIMARY AUTO_INCREMENT 
name VARCHAR(30) NOT NULL 

我也有表後

id INT PRIMARY AUTO_INCREMENT 
post TEXT NOT NULL 

如果用戶訪問一個特定的文章中,我想在一些地方保存在數據庫,他已經查看了該帖子。我將如何去修改數據庫以適應這種情況,以及如何查詢用戶沒有看到的帖子。我應該創建一個新表來存儲這些信息嗎?還是有其他一些漂亮的技巧?
這個想法是,我只是想要一種方式,如果用戶查看帖子,一旦他再也看不到它。
對不起,我只是想學習數據庫,這是我覺得很有趣和困難的挑戰之一。

回答

3

您需要實施many-to-many relationship:用戶訪問多個帖子,並且帖子被多個用戶訪問。

這將需要一個表的形式,只有兩列,它們中的每一個外鍵到現有的表中的一個:

CREATE TABLE user_post_visit (
    user_id INT NOT NULL, 
    post_id INT NOT NULL, 
    PRIMARY KEY (user_id, post_id), 
    FOREIGN KEY (user_id) REFERENCES user(id), 
    FOREIGN KEY (post_id) REFERENCES post(id) 
); 

添加記錄到該表中的每一個用戶瀏覽時間帖子。爲了找到一個給定的用戶帖子觀看尚未:

SELECT post.* 
FROM post 
LEFT JOIN user_post_visit AS upv 
    ON (upv.post_id = post.id AND upv.user_id = <your user ID here>) 
WHERE upv.post_id IS NULL; 
+0

這簡單O_O我簡直驚呆了,這有根本沒有發生,非常感謝你:) – Quillion

0

看來我跟在別人後面@RandomSeed。 :D

在我看來,你想要多對多的關係,所以你需要一個新表。你如何做到這一點是不嚴格的,但例如

表 「read_post」 或 「unread_post」:

USER_ID,POST_ID

如果表是unread_post(但你必須創建新排在新的崗位創造的每個用戶),您可以顯示未讀回帖:

選擇文本FROM後INNER JOIN unread_post ON post.id = unread_post.post_id WHERE我們er_id =?

如果table是read_post get unread請參閱RandomSeeds答案。

0

用什麼RandomSeed曾建議創建用戶和後,然後之間的橋樑表使用以下方法來查詢出用戶觀看的帖子:

SELECT post_id, post FROM user_post_visit, post WHERE user_post_visit.user_id=<user id> 
相關問題