MySql批处理的小窍门:排行榜类数据生成
MySql批处理的小窍门:排行榜类数据生成
最近在做新版本的开发,其中涉及到排行榜的批量预生成,在此分享给大家。
关键点
名次的计算(不考虑用游标)
单榜单查询
对于排行榜这种类型的数据,当只查一个排行榜时,由于数据量较少,我们可以直接查询后,在程序中生成名次(例如实时的只针对一个目的地下某类poi的好评榜)处理的时候php直接执行查询语句获取即可。
多榜单生成
但随着要生成的榜单数量增多,这种通过程序中转一次的方式,显然并不能令人满意,MySql中有没有一种方式,能够满足批量生成符合条件的排行榜时的名次批量生成吗?(例如:按特定要求生成排行榜,每个目的地下是否有排行榜,排行榜数量都不确定的情况)
如果能够生成名次列,我们就可以方便的通过INNER JOIN的方式将榜单成员记录和榜单的对应关系连起来。(这里就不赘述)
例子:多榜单的名次列生成
下面是一个批量生成分类型的排行榜(按评分score从高到低排序)
-- POI基础表
CREATE TABLE temp_poi
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL, -- 名称
type_id VARCHAR(255) NOT NULL, -- 类型
score int NOT NULL, -- 评分
PRIMARY KEY(id)
);
-- 生成测试数据
INSERT INTO temp_poi(name,type_id,score)
VALUES('a',1,75)
,('b',2,28)
,('c',1,77)
,('d',3,55)
,('e',2,88)
,('f',3,37)
,('g',1,49)
,('h',2,57)
,('i',1,63)
,('j',3,44)
;
-- 生成带名次的榜单
SELECT
type_id
,id
,score
,@position := if(@previous = type_id, @position, 0) + 1 AS position
,@previous := type_id
FROM
temp_poi
, (SELECT @previous := -1, @position := 0) AS s -- 非常重要的一行
ORDER BY
type_id
,score DESC
;
特别注意
其中一行代码:
, (SELECT @previous := -1, @position := 0) AS s
如果缺失会导致非常隐蔽的错误:在首次连接MySql后的第一次运行时会导致排名计算出错(之后就正常了)
MySql批处理的小窍门:排行榜类数据生成的更多相关文章
- VAssistX使用小窍门
日常使用中的一些VAssistX使用小窍门,简单总结下 一,修改VAssistX默认缓存文件路径,防止默认C盘被占用空间过大 1. 打开注册表HKCU\Software\Whole Tomato,新 ...
- 【干货】分享总结:MySQL数据一致性 罗小波 星辉天拓
[干货]分享总结:MySQL数据一致性 罗小波 星辉天拓 http://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ==&mid=2653928966&a ...
- WPF中线性渐变画刷的一个小窍门
最近被项目里面控件的设计搞的死去活来的,大部分的设计都会需要使用进度条的功能,因为UI形状的变态,使用ProgressBar不能满足需求,没办法就自己想办法实现进度显示.折腾的多了发现一个很不错的方法 ...
- 教你50招提升ASP.NET性能(二十四):ORM小窍门
ORM TipsORM小窍门 More and more people are using Object to Relational Mapping (ORM) tools to jump the d ...
- 编程入门视频【 Python、PHP、ThinkPHP、Laravel、Mysql、微信小程序】
免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程序等学习视频 点击进入搜刮 免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程 ...
- 【放松一下】北美小游戏排行榜TOP10——“点击英雄”
大家平时工作都比較忙,在这里推荐一款游戏让大家放松一下.让你体验到指数爆炸般挣钱的快感. 北美小游戏排行榜TOP10--"点击英雄" 简要说明: 游戏能够挂机,关闭电脑.游戏也会自 ...
- 10个提升MySQL性能的小技巧
从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫. 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困境之 ...
- JavaScript性能优化小窍门汇总(含实例)
在众多语言中,JavaScript已经占有重要的一席之地,利用JavaScript我们可以做很多事情 , 应用广泛.在web应用项目中,需要大量JavaScript的代码,将来也会越来越多.但是由于J ...
- 10个实用的UX设计作品推销小窍门
以下内容由Mockplus(摹客)团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 众所周知,产品用户体验很重要,即使是Google也知道这一点.但是,当真正涉及到UX 设计销 ...
随机推荐
- 取消StringGrid的自动滚动
StringGrid的Options的goRowSelect为false时,在点击右侧未显示完全的Cell,StringGrid会自动向左滚动,怎样设定,取消StringGrid的自动滚动啊?Delp ...
- DEDECMS中直接通过数据库插入文章
突然想用爬虫爬来的数据对接DEDECMS,所以研究了一下怎么直接在DEDECMS中直接插入一片文章 (但其实我并没有这样用.因为我直接用前台做的网页,用ajax请求的json数据,其他的都简单,就是没 ...
- jQuery调用WCF服务传递JSON对象
下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将在客户端使用Ajax技术来 与WCF服务进行通信.这里我们仅使用jQuery去连接Web ...
- [iOS翻译]Cocoa编码规范
简介: 本文整理自Apple文档<Coding Guidelines for Cocoa>.这份文档原意是给Cocoa框架.插件及公共API开发者提供一些编码指导,实质上相当于Ap ...
- matlab批量合并txt文件
1: %% merge.m 2: %%%%Main程序%%%%%% 3: %%%%%% 4: %%%%%%本程序合并完各个子文件夹中的txt到主文件目录下,并且合并的文件以子文件夹名字命名 5: %% ...
- [CareerCup] 1.7 Set Matrix Zeroes 矩阵赋零
1.7 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are ...
- 20135208 第一次JAVA实验报告
课程:Java程序设计 班级: 1352 姓名:贺邦 学号:20135208 成绩: 指导教师:娄嘉鹏 实验日期:2 ...
- 测试技能积木-AWK的简要用法
做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...
- 【MPI学习3】MPI并行程序设计模式:不同通信模式MPI并行程序的设计
学习了MPI四种通信模式 及其函数用法: (1)标准通信模式:MPI_SEND (2)缓存通信模式:MPI_BSEND (3)同步通信模式:MPI_SSEND (4)就绪通信模式:MPI_RSEND ...
- web性能优化之:no-cache与must-revalidate深入探究
引言 稍微了解HTTP协议的前端同学,相比对Cache-Control不会感到陌生,性能优化时经常都会跟它打交道. 常见的值有有private.public.no-store.no-cache.mus ...