Uroboros

博客开发 · BLOG-DEVELOPMENT2026.07.22
57 次阅读

博客开发日志 - day12

今天完善了博客文章访问统计,30分钟内重复访问同一篇文章不计入次数。

   今天把访问量统计这一块的逻辑完善了,具体是新建一张表,存post+ip,同一ip 30分钟内,重复访问则不计数。具体的逻辑其实很简单,但是写sql有点麻烦。我都有点忘了为什么要用sqlc了,貌似是后端无法区分传入的是nil还是null

sql
复制代码
-- name: IncrementPostStatsView :exec
WITH visitor AS (
    INSERT INTO post_viewers (
        post_id,
        ip,
        last_viewed_at
    )
    VALUES (
        $1,
        $2,
        NOW()
    )
    ON CONFLICT (post_id, ip)
    DO UPDATE
    SET last_viewed_at = NOW()
    WHERE post_viewers.last_viewed_at < NOW() - INTERVAL '30 minutes'
    RETURNING post_id
)
INSERT INTO post_stats (
    post_id,
    view
)
SELECT
    post_id,
    1
FROM visitor
ON CONFLICT (post_id)
DO UPDATE
SET view = post_stats.view + 1;

开发数据库