实现商品浏览记录功能,关键在于设计合理的数据库结构,并配合后端逻辑记录用户行为。以下是一个实用的 MySQL 商品浏览记录系统搭建方案,适合中小型电商或内容平台。
1. 数据库表设计:浏览记录表(view_history)
创建一张专门记录用户浏览行为的表,核心字段包括用户ID、商品ID、浏览时间等:
CREATE TABLE view_history (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
view_time DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_product (user_id, product_id),
INDEX idx_product_time (product_id, view_time),
INDEX idx_user_time (user_id, view_time)
);
说明:
user_id:标识浏览用户,若支持游客浏览,可设为0或使用session_id替代 product_id:关联商品表(如products)的主键 view_time:记录访问时间,便于后续按时间排序或分析趋势 索引设计:为常用查询字段建立索引,提升查询效率2. 后端记录逻辑(以PHP为例)
当用户访问商品详情页时,插入一条浏览记录。为避免重复刷屏,可限制同一用户短时间内对同一商品只记录一次:
// 示例:插入浏览记录前判断是否已存在近期记录
INSERT INTO view_history (user_id, product_id)
SELECT ?, ?
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM view_history
WHERE user_id = ? AND product_id = ?
AND view_time > DATE_SUB(NOW(), INTERVAL 30 MINUTE)
);
建议:
使用预处理语句防止SQL注入 高频写入场景下可考虑异步写入或队列机制减轻数据库压力 前端可通过AJAX发送浏览请求,不影响页面加载速度3. 查询用户浏览历史
获取某用户最近浏览的商品列表,常用于“最近看过”功能:
SELECT v.product_id, p.name, p.price, v.view_time FROM view_history v JOIN products p ON v.product_id = p.id WHERE v.user_id = 123 ORDER BY v.view_time DESC LIMIT 10;
优化提示:
结合商品表查询时注意JOIN性能,确保product_id有索引 可定期归档旧数据,或设置自动清理策略(如保留90天)