Re: [請益] 關於討論區程式的文章列表
※ 引述《september02 (九月二號)》之銘言:
: 像PTT這BBS
: 1.文章列表中有個+,代表這文章你還沒有讀過
: 2.有個~,代表你讀過後又有新的推文
: 3.數字代表推文數
: 如果要在PHP中實現這個功能
: 3是很簡單,幾乎各種討論區程式都有
: 1大部份的討論區程式,都是利用HYPER LINK 點過後顏色會不同(CSS)
: 來讓使用者判斷這文章是否已讀過
: 我的問題是在2這個功能,讀過後如果有新的回應,要出現某種符號
: 在我的預想中,要實現這個功能必須要記錄使用者讀過哪些文章以及讀的時間
: 在秀出文章列表時,才能比對該文章的更新時間和上次該使用者的讀取時間
: 來計算是否要出現那個新推文的符號
: 可是這樣恐怕會大幅拖累程式的效能
: 因為使用者每讀一次,就要用資料庫來記錄一筆包含ID,文章ID,timestamp的資料
: 假設記錄前一百篇文章(感覺PTT好像記錄的更多?)
: 文章列表每頁秀20篇文章
: 那等於做出一個文章列表,就要多20次的SELECT動作
: 雖然我的討論區人不像PTT那麼多,但是如果同時有200人在線上
: 這樣子恐怕電腦大部份的效能,都用在做文章列表了吧
: 有沒有什麼別的方法更有效率達到功能2呢?
: 盼指教,謝謝
如果只要做到以上功能 倒是不需要記錄讀取時間
建一個table user_post
欄位有userid, postid, status [ ENUM:('newResponse','allRead')]
Primary key是(userid, postid)
當使用者u讀了文章p時
replace into `user_post` VALUES (u,p,'allRead');
當文章p有新回應時
update `user_post` SET `status` = 'newResponse' WHERE `postid` = p
(如果使用者又讀了有新回應的文章 replace會將這筆紀錄的status設為'allread')
當使用者u要看文章列表時 你只要一個select
select user_post.`status` (和其他post資料如title, postid等等)
from post left join user_post
on post.`postid` = user_post.`postid` and user_post.`userid` = u
然後看status欄位
如果是NULL就代表未讀(顯示+) newResponse代表有新回應(顯示~) allRead就是都讀過了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.114.50
推
01/28 15:41, , 1F
01/28 15:41, 1F
→
01/28 15:53, , 2F
01/28 15:53, 2F
→
01/28 15:54, , 3F
01/28 15:54, 3F
→
01/28 15:54, , 4F
01/28 15:54, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章