mysql高级扩展
有关网址:
1、时间比较
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
2、时间戳比较
select * from ds_order where order_state = 10 and (unix_timestamp(now()) - add_time)>600
3、在大数据的情况下,内连接是比外连接要快很多
join 处理出来13000左右,大概是7秒
left join == LEFT OUTER JOIN 处理出来23000左右,大概是49秒
4、mysql查最近的值,比如18查询最近的值,17,18,19
SELECT
*
FROM
(
SELECT DISTINCT
(user_id),
rob_prize
FROM
ds_purchase_record
WHERE
rob_prize <> 18
OR rob_prize = 18
ORDER BY
ABS(rob_prize-18) ASC
) AS one
GROUP BY
user_id
order by ABS(rob_prize-18) ASC;
5、用到and or
or 的写法要写()
select * from message where (typeid=31) or (typeid=30) or (typeid=32) or (typeid=33) order by id desc;
6、存储过程与创建函数的使用
存储过程与自定义函数的不同,存储过程可以返回多个字段,自定义函数只能返回一个字段
(1)存储过程:
# 删除过程
DROP PROCEDURE IF EXISTS getOrderInfo;
# 创建过程,只有IN的
delimiter //
CREATE PROCEDURE getOrderInfo(IN oid int(11))
BEGIN
select * from ds_order where order_id=oid;
END //
delimiter ;
call getOrderInfo(21);
# 删除过程
DROP PROCEDURE IF EXISTS getOrderField;
#创建过程,有IN(条件字段)的,也有OUT(输出字段)的
delimiter //
CREATE PROCEDURE getOrderField(IN oid int(11),OUT sn VARCHAR(255))
BEGIN
select order_sn INTO sn from ds_order where order_id=oid;
END //
delimiter ;
call getOrderField(21,@sn);
SELECT @sn;
# 删除过程
DROP PROCEDURE IF EXISTS getInfo;
delimiter //
CREATE PROCEDURE getInfo(IN oid int(11),IN dtable VARCHAR(25))
BEGIN
set @s = concat("select * from ",dtable," WHERE order_id = ",oid);
prepare stmt from @s; #预定义SQL
execute stmt; #填充SQL
DEALLOCATE prepare stmt; #
END //
delimiter;
call getInfo(21,'ds_order');
7、根据条件排序
SELECT
fg.*, a.uid,
a.if_boss,
CASE
WHEN (a.if_boss = 0 && uid = 179150) THEN
1
WHEN (a.if_boss is null) THEN
2
END AS num
FROM
ds_fight_group AS fg
LEFT JOIN ds_assemble AS a ON fg.fg_id = a.fg_id
ORDER BY
num ASC
SELECT
count(
CASE
WHEN da.if_boss = a.id THEN
1
ELSE
NULL
END
) as `_member`,
count(case when o.order_state>10 then 1 else null end) as `_order_count`,
a.uid,
a.id,
a.a_type
FROM
ds_assemble AS a
LEFT JOIN ds_assemble AS da ON da.if_boss = a.id
LEFT JOIN ds_order as o on o.order_sn=da.order_sn
WHERE
a.id > 0
AND a.if_boss = 0
GROUP BY
a.id
注意点:如果要判断null的话,这里要写 is null
SELECT
count(
CASE
WHEN da.if_boss = a.id THEN
1
ELSE
NULL
END
) AS fnum,
count(
CASE
WHEN o.order_state > 10 THEN
1
ELSE
NULL
END
) AS onum,
a.*, wx.avatar,
wx.mobile
FROM
ds_assemble AS a
LEFT JOIN ds_assemble AS da ON da.if_boss = a.id
LEFT JOIN ds_order AS o ON o.pay_sn = da.order_sn
LEFT JOIN ds_member AS m ON a.uid = m.member_id
LEFT JOIN ds_wxtempuser AS wx ON m.member_name = wx.mobile
LEFT JOIN ds_order AS orr ON a.order_sn = orr.pay_sn
WHERE
1 = 1
AND a.id > 0
AND a.if_boss = 0
AND a.fg_id = 7
AND (
a.add_time + 62400 > 1557133850
)
AND orr.order_state > 10
GROUP BY
a.id
HAVING
a.a_type > (onum + 1)
LIMIT 0,10
全部竞猜记录
SELECT
m.member_name,
gr.`name`,
gr.gj_id,
pr.rob_prize,
pr.addtime,
pr.pay_sn
FROM
ds_purchase_record AS pr
LEFT JOIN ds_member AS m ON pr.user_id = m.member_id
LEFT JOIN ds_grabjade AS gr ON pr.gid = gr.gj_id
ORDER BY
addtime DESC
根据一条纪录的维度查已售数量
SELECT
count(
CASE
WHEN da.if_boss = a.id THEN
1
ELSE
NULL
END
) AS fnum,
count(
CASE
WHEN da.a_status=1 && da.uid>0 THEN
1
ELSE
NULL
END
) AS onum,
a.*
FROM
ds_assemble AS a
LEFT JOIN ds_assemble AS da ON da.if_boss = a.id
WHERE
1 = 1
AND a.id > 0
AND a.if_boss = 0
AND a.fg_id = 16
and a.a_status=1
GROUP BY
a.id
这是保存的时间格式
<!-- 按日查询 --> SELECT DATE_FORMAT(created_date,'%Y-%m-%d') as time,sum(money) money FROM o_finance_detail where org_id = 1000 GROUP BY time <!-- 按月查询 --> SELECT DATE_FORMAT(created_date,'%Y-%m') as time,sum(money) money FROM o_finance_detail where org_id = 1000 GROUP BY time <!-- 按年查询 --> SELECT DATE_FORMAT(created_date,'%Y') as time,sum(money) money FROM o_finance_detail where org_id = 1000 GROUP BY time <!-- 按周查询 --> SELECT DATE_FORMAT(created_date,'%Y-%u') as time,sum(money) money FROM o_finance_detail where org_id = 1000 GROUP BY time
使用 FROM_UNIXTIME 可以把时间戳转换为日期:
select FROM_UNIXTIME(invest_time,'%Y年%m月%d') from crm_invest_apply
按指定排序
select * from fc_image where i_id in (50,42,58,41,43,44,60) ORDER BY field(i_id,50,42,58,41,43,44,60)
mysql也可以用IF来做判断
SELECT
age,
IF (
age = 10, // 条件
'你好', // 为true时的答案
'你不好' // 为false时的答案
) cn
FROM
fc_optimization
☐ HAVING cn = '你好' //最后的条件,不能用where去查条件,会报错
mysql高级扩展的更多相关文章
- mysql笔记04 MySQL高级特性
MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...
- 24.Mysql高级安装和升级
24.Mysql高级安装和升级24.1 Linux/Unix平台下的安装 24.1.1 安装包比较Linux下的Mysql安装包分为RPM包.二进制包.源码包3种.RPM包优点是安装简单,适合初学者: ...
- Mysql 高级部分
MySQL 高级部分 (1)索引(index)..................................................................... 1 (2) ...
- 干货:鲜为人用的MySQL高级特性与玩法!
上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...
- 「MySQL高级篇」MySQL索引原理,设计原则
大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...
- 「MySQL高级篇」MySQL锁机制 && 事务
大家好,我是melo,一名大三后台练习生,最近赶在春招前整理整理发过的博客~! 引言 锁锁锁,到哪到离不开这桩琐事,并发琐事,redis琐事,如今是MySQL琐事,这其中琐事,还跟MySQL另一个重要 ...
- PHP安装mysql.so扩展
在PHP中mysql_connect模块已经逐渐被弃用,我在搭建环境时也没有再安装mysql扩展,但是今天在维护一个老项目时,出现报错 Fatal error: Uncaught Error: Cal ...
- Mysql高级之权限检查原理
原文:Mysql高级之权限检查原理 用户进行数据库操作分为两步: 1 是否有权限连接,根据host,name,password: 2 是否有权限进行CURD: 图示解说: 关于用户权限在哪里进行存放? ...
- Mysql高级之触发器
原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...
随机推荐
- NLP(七) 信息抽取和文本分类
命名实体 专有名词:人名 地名 产品名 例句 命名实体 Hampi is on the South Bank of Tungabhabra river Hampi,Tungabhabra River ...
- HTML(六)框架,颜色,脚本,字符实体,统一资源定位器
HTML 框架 HTML框架 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面 Iframe移除边框 使用iframe来显示目标链接页面 RUNOOB.COM HTML 颜色 rgb(255, ...
- JavaScript get set方法 ES5/ES6写法
网上鲜有get和set的方法的实例,在这边再mark一下. get和set我个人理解本身只是一个语法糖,它定义的属性相当于“存储器属性” 为内部属性提供了一个方便习惯的读/写方式 ES5写法 func ...
- 牛客小白月赛6 I 公交线路 最短路 模板题
链接:https://www.nowcoder.com/acm/contest/136/I来源:牛客网 题目描述 P市有n个公交站,之间连接着m条道路.P市计划新开设一条公交线路,该线路从城市的东站( ...
- Taro框架下qq小程序开发体验
qq小程序发布了,作为第一批体验者 .还是发现了和微信小程序很多不同的地方. 最新的小程序我这里都是用Taro开发的,体验较为不错.数据管理用的是redux.JS用的ES6加async等. 微信小程序 ...
- .NetCore技术研究-ConfigurationManager在单元测试下的坑
最近在将原有代码迁移.NET Core, 代码的迁移基本很快,当然也遇到了不少坑,重构了不少,后续逐步总结分享给大家.今天总结分享一下ConfigurationManager遇到的一个问题. 先说一下 ...
- 关于volatile关键字的最佳解释
直接放原博主链接,真的写得非常好,看懂这个面试官问再多也不怕了: https://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatil ...
- vue-property-decorator vue typescript写法
什么是Typescript TypeScript 是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 的语法.作者是安德斯大爷, Delphi ...
- JAVA中的内存们
我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...
- Python基础(十一)
今日主要内容 补充:三目运算 f-strings 迭代器 生成器 补充:三目运算 三目运算(三元运算)结构: 表达式1 if 条件表达式 else 表达式2 c = a if a > b els ...