问题背景
1) 限制:每个用户在一个类目下,最多享受4单满送优惠。
即统计享受了满送优惠的订单数时需要排除掉同一类目下第四单以后的订单
如何得到每个用户同一类目下第四单ID呢?
select fourth(id) from order group by user_id, category;
可惜Mysql并没有分组函数可以方便的得到每组中第四个id。但可以有变通方案, 如有如下的表
select * from t; +----+--------+----------------------------------+ | id | status | user_id | +----+--------+----------------------------------+ | 1 | 10 | 24e568a88fae11e6bb0650b497d97cdd | | 2 | 10 | 24e568a88fae11e6bb0650b497d97cdd | | 3 | 20 | 24e568a88fae11e6bb0650b497d97cdd | | 4 | 20 | 24e568a88fae11e6bb0650b497d97cdd | | 5 | 10 | e8669ac28fae11e6bb0650b497d97cdd | | 6 | 20 | e8669ac28fae11e6bb0650b497d97cdd | | 7 | 10 | e8669ac28fae11e6bb0650b497d97cdd | | 8 | 20 | e8669ac28fae11e6bb0650b497d97cdd | | 9 | 10 | e8669ac28fae11e6bb0650b497d97cdd | +----+--------+----------------------------------+
如何得到每个用户第二次成功支付(status='10')的订单呢?
方法一 -- 逐个查询
select * from t where user_id = '24e568a88fae11e6bb0650b497d97cdd' and status = '10' order by id limit 1,1; +----+--------+----------------------------------+ | id | status | user_id | +----+--------+----------------------------------+ | 2 | 10 | 24e568a88fae11e6bb0650b497d97cdd | +----+--------+----------------------------------+
方案二 -- 一次性查询
SELECT * FROM (SELECT id, user_id, @rank:=IF(@current_user_id = user_id, @rank + 1, 1) rank, @current_user_id:=user_id FROM (SELECT @current_user_id:=NULL, @rank:=NULL) vars, t WHERE t.status = '10' ORDER BY user_id , id) a WHERE rank = 2; +----+----------------------------------+------+----------------------------------+ | id | user_id | rank | @current_user_id:=user_id | +----+----------------------------------+------+----------------------------------+ | 2 | 24e568a88fae11e6bb0650b497d97cdd | 2 | 24e568a88fae11e6bb0650b497d97cdd | | 7 | e8669ac28fae11e6bb0650b497d97cdd | 2 | e8669ac28fae11e6bb0650b497d97cdd |
原理解释
先按user_id和id顺序排序, 然后从1开始分配序号,同一用户就递增,不同用户则重新从1开始。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini