何小玍的前端之路(不定时更新)【mysql成长记录】
– 1.排序问题
order by xx desc --降序
order by xx asc --升序
order by xx desc, asc --先降序再升序
– 2.行转列
select xx
from yy
left join aa a on yy.id = a.id and 条件a
left join aa b on yy.id = b.id and 条件b
left join aa c on yy.id = c.id and 条件c
left join aa d on yy.esc = d.id and 条件d
– 3.jfinal写法,在sql中使用if语句(sql中无法使用)
#if(xx != null && xx != ‘’)
and zz.yy = #para(xx)
– 4.ifnull 不为空
ifnull(xx.id)
– 5.根据sql得出的表再合并或处理
select *
from (
select *
from xx
where xx.id = #para(id);
)tt
group by tt.id
– 6.判断状态时
CASE MAX(ctaccountlog.billtype)
WHEN ‘tongcs’ THEN ‘发件’
WHEN ‘prepay’ THEN ‘充值’
ELSE ‘未知’ END AS billtype,
– 7.一对多,多的表
group_concat 合起来
max 最近的记录
min 最早的记录
– 8.对表中数据集合
count(【all】)【as 列别名】 返回表中的记录数
SELECT COUNT ( ) as 学生总人数 FROM 学生表
– 9:查询天数
今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0
昨天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=1
7天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=7
30天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=30
本月的所有数据:select * from 表名 where DateDiff(mm,datetime类型字段,getdate())=0
本年的所有数据:select * from 表名 where DateDiff(yy,datetime类型字段,getdate())=0
函数语法:DATEDIFF ( datepart , startdate , enddate )。参数datepart表示日期计算单位,常用有d,m,yyyy这3个值(d-天数,m-月份,yyyy-年份)。
参数startdate表示计算的开始日期,简单点说是被减数,参数enddate表示结束日期,计算方式是enddate 中减去 startdate,值的单位取决于传入的datepart参数。
where date(psexptrack.cretime) = date(curdate()) – 日
where week(psexptrack.cretime) = week(curdate()) – 周
where month(psexptrack.cretime) = month(curdate()) – 月
where year(psexptrack.cretime) = year(curdate()) – 年
WHERE date(#para(psexptrack.cretime) = date(CURDATE())
今天是2013年5月20日。
date_sub(curdate(),interval 1 day) 表示 2013-05-19
date_sub(curdate(),interval -1 day) 表示 2013-05-21
date_sub(curdate(),interval 1 month) 表示 2013-04-20
date_sub(curdate(),interval -1 month) 表示 2013-06-20
date_sub(curdate(),interval 1 year) 表示 2012-05-20
date_sub(curdate(),interval -1 year) 表示 2014-05-20
根据查询结果批量修改数据
UPDATE ebsseller.tsordergrade INNER JOIN (
SELECT tsordergrade.isread,
tsordergrade.id
FROM ebsseller.tsorder
LEFT JOIN ebsseller.tsordergrade ON tsorder.id = tsordergrade.tsorderid
WHERE tsorder.payuser = 4558 AND tsordergrade.content IS NOT NULL
) tt ON tsordergrade.id =tt.id SET tsordergrade.isread = ‘1’
UPDATE a INNER JOIN (SELECT yy FROM b) c ON a.id =c.id SET a.xx = c.yy
– 时间限制在2个月内
AND tsordergrade.cretime BETWEEN DATE_SUB(NOW(), INTERVAL 2 MONTH) AND NOW()