MySQL-求一个数据统计高效sql语句

小组事务管理 小组事务管理 主题:974 回复:1955

MySQL-求一个数据统计高效sql语句

夜无邪 发布于 2017-01-14 字数 227 浏览 1204 回复 3

充值订单部分表结构:
order_id、user_id、create_time、pid、prid
其中order_id是唯一索引

我想获取同一用户(user_id)最近充值前5个pid和prid,这个sql如何写呀?还有由于这个表数据量很大,所以sql要尽量效率高些。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

瑾兮 2017-09-03 3 楼

单独sql统计没想到很高效的方法,只能联表查询:

SELECT A.pid FROM 充值表 A
WHERE
order_id = (SELECT max( order_id ) FROM 充值表 WHERE user_id = '".$user_id."' AND pid = A.pid )
ORDER BY A.create_time DESC LIMIT 5

SELECT A.prid FROM 充值表 A
WHERE
order_id = (SELECT max( order_id ) FROM 充值表 WHERE user_id = '".$user_id."' AND prid = A.prid )
ORDER BY A.create_time DESC LIMIT 5

想挽留 2017-08-17 2 楼

SQL语句本身可能优化的空间有限,可以写为:

select pid, prid from table_name where user_id=XXX limit 5;

其中,如果不是按照时间排序,还有必要考虑where中增加create_time。这里没写(为了减少不必要的查询条件)。

至于执行效率,可以从其他方面着手,比如服务器性能,比如数据库建立索引等等。

夜无邪 2017-03-17 1 楼

试试这样:

 SELECT DISTINCT pid,prid FROM tablename WHERE user_id = xx limit 5

然后对user_id 加个索引,我想速度应该还可以!!