用戶點擊文章時,後台自動將該新聞的閱讀次數 +1。
直接在資料庫層面執行原子遞增,避免併發問題:
// Model
public function increment_view($article_id) {
$this->db->set('views', 'views + 1', FALSE); // FALSE 表示不轉義
$this->db->where('id', $article_id);
return $this->db->update('articles');
}
$.post('/article/increment_view', { id: articleId }, function(res) {
if (res.success) $('#view-count').text(res.new_count);
});
public function increment_view() {
$id = $this->input->post('id');
$this->article_model->increment_view($id);
// 重新查詢最新值
$new = $this->article_model->get_views($id);
echo json_encode(['success' => true, 'new_count' => $new]);
}
先 SELECT 再 UPDATE 會有競態條件,高併發下計數不準。