答案:通过设计view_history表记录用户浏览行为,结合索引优化与去重逻辑,实现高效的商品浏览记录功能。

实现商品浏览记录功能,关键在于设计合理的数据库结构,并配合后端逻辑记录用户行为。以下是一个实用的 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为例)
当用户访问商品详情页时,插入一条浏览记录。为避免重复刷屏,可限制同一用户短时间内对同一商品只记录一次:
Destoon B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。 系统特性1、跨平台。支持Linux/Unix/Windows服务器,支持Apache/IIS/Zeus等2、跨浏览器。基于最新Web标准构建,在
// 示例:插入浏览记录前判断是否已存在近期记录
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天)
4. 可扩展功能建议
- 去重展示:按商品去重,取每个商品最后一次浏览时间
- 统计热门商品:按product_id分组统计浏览量,辅助推荐系统
- 结合Redis缓存:将用户近期浏览记录缓存,减少数据库查询








