如何使用mysql实现收藏排行_mysql收藏排行查询实战

#技术教程 发布时间: 2025-12-21
实现收藏排行需先设计favorites表(含user_id、item_id、item_type等字段),再通过GROUP BY COUNT统计并按次数降序排列;可关联主表补充信息,加时间/状态等条件筛选,并用复合索引或预计算优化性能。

要实现收藏排行,核心是统计每个内容被收藏的次数,再按次数降序排列。MySQL 本身不提供“收藏”表结构,所以需要先有合理的数据表设计,再通过聚合查询拿到排行结果。

收藏表结构设计要点

典型场景中,收藏行为通常涉及两个主体:用户(user)和被收藏的内容(如文章、商品、视频等)。推荐使用一张独立的收藏关系表,例如:

  • favorites 表:包含 user_id(收藏者)、item_id(被收藏对象ID)、item_type(可选,用于区分文章/商品等类型)、created_at(时间戳)
  • 确保 (user_id, item_id, item_type) 组合唯一,避免重复收藏
  • item_iditem_type 建联合索引,提升分组统计效率

基础收藏排行查询语句

假设你要查“所有文章”的收藏数排行(item_type = 'article'),直接用 GROUP BY + COUNT 即可:

SELECT 
  item_id AS article_id,
  COUNT(*) AS favorite_count
FROM favorites
WHERE item_type = 'article'
GROUP BY item_id
ORDER BY favorite_count DESC
LIMIT 10;

这条语句返回收藏数最高的前10篇文章ID及对应次数。如果还需展示文章标题等信息,可 LEFT JOIN 文章主表(如 articles):

SELECT 
  a.id,
  a.title,
  COUNT(f.item_id) AS favorite_count
FROM articles a
LEFT JOIN favorites f 
  ON f.item_id = a.id AND f.item_type = 'article'
GROUP BY a.id, a.title
ORDER BY favorite_count DESC
LIMIT 10;

支持多维度筛选的进阶写法

实际业务中常需限定时间范围(如“近7天收藏榜”)或排除无效用户(如封禁用户、测试账号):

  • 加时间条件:AND f.created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  • 排除特定用户:AND f.user_id NOT IN (1001, 1002) 或关联用户状态表过滤
  • 只统计有效收藏(如未取消):可在 favorites 表中增加 is_active 字段,默认为 1,取消时设为 0

示例(7天内活跃用户的收藏排行):

SELECT 
  f.item_id,
  COUNT(*) AS favorite_count
FROM favorites f
INNER JOIN users u ON f.user_id = u.id
WHERE f.item_type = 'article'
  AND f.is_active = 1
  AND u.status = 'active'
  AND f.created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY f.item_id
ORDER BY favorite_count DESC
LIMIT 10;

性能优化建议

当收藏量达百万级后,单纯 GROUP BY 可能变慢。可考虑:

  • item_type, item_id, is_active, created_at 上建立复合索引
  • 对高频访问的排行榜(如日榜、周榜),用定时任务将结果预计算并存入 rankings 表,查询时直取
  • 若实时性要求不高,可用 Redis 缓存 TOP-N 结果,减轻数据库压力

不复杂但容易忽略的是:确保 WHERE 条件中的字段都有索引支撑,否则 COUNT + GROUP BY 会触发全表扫描。




上一篇 : SQL复杂条件查询如何构建_深入讲解快速提升实战能力【技巧】

下一篇 : c#中实现退出程序后自动重新启动程序的方法

推荐阅读

电话:400 76543 55
邮箱:915688610@qq.com
品牌营销
客服微信
搜索营销
公众号
©  丽景创新 版权所有 赣ICP备2024032158号 
宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 恩施州毯滚百货有限公司 恩施州毯滚百货有限公司 襄阳市蜂欢商贸有限公司 襄阳市蜂欢商贸有限公司 恩施州换冯百货有限公司 恩施州换冯百货有限公司 恩施州健提百货有限公司 恩施州健提百货有限公司 西安益零商贸有限公司 西安益零商贸有限公司 南奥教育 南奥教育 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南奥教育网 南奥教育网 南奥教育网 南奥教育网 南奥学习网 南奥学习网 南奥学习网 南奥学习网 南奥教育 南奥教育 南奥留学记 南奥留学记 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 广照天下广告 广照天下广告 广照天下广告策划 广照天下广告策划 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下广告策划 广照天下广告策划 广照天下广告策划 广照天下广告策划 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案