月度归档: 2017年8月

【mysql】insert … on duplicate key update column=IF(条件,值1,值2 ) 简直神一样的操作

Insert…on duplicate key相信大家都知道了,是一个非常好用的功能,可以在批量导入数据的时候插入并且保证在key冲突的时候执行更新操作而不是报错。笔者最近写代码的时候却碰到一个需求,就是想要在这个基础上根据某列的值来决定update后面的值,举个例子,如果columnA>0,那么更新columnB=1或者不更新,然后就在网上对duplicate key和update的用法大肆搜索一番,看有没有类似的用法,结果都是比较常规的用法,颇为失望。然后又想到普通的update是在后面加where条件的,那能不能试试直接加where条件呢?残念,这个也行不通。。。

然后在准备放弃老老实实用2条sql执行的时候,脑子里突然灵光一闪,想到mysql不是有自带函数的么?能不能结合利用一下呢?于是查mysql函数大全,我翻翻翻,bingo!终于被我找到一个函数

IF 函数用法

语法: IF(expr1,expr2,expr3)

函数用法说明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,则 IF() 的返回值为 expr2 ; 否则返回值则为 expr3 。 IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定

这不就是我想要的吗?赶紧试试

INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA)

自增

array(2) {
[0]=>
int(0)
[1]=>
int(0)
}

iframe异步加载页面动态内容,实现页面动静分离

之前实现了手机站小说封面页动静分离的改造,稍微简单啰嗦几句,后面有机会详细的再写下。

封面页以书为key,缓存起来封面页的静态的通用的,很少改变的主要部分内容,利用异步加载的方法,修改页面上个别按钮和个人信息的内容部分。主页面内容部分由原来的300-500ms的响应时间可降低至50ms左右,因为内容都是直接根据url里的书号产生的key来从存储中获得的。另外通过异步加载动态获取的内容可以控制在60-100ms之内,基本实现了页面的动静分离和提速。

现在的问题是这样的,因为某些原因页面上布置了至少4、5个广告,当用户处于2g,甚至GPRS网络的情况下,因为网速的限制以及其他的一些原因,原本用的jquery的ajax加载非常的滞后执行,导致页面显示出来后目录部分原本文字需要等待4、5秒才能看到动态加载获取到目录内容替换掉静态内容中的目录部分。

这样就会给用户及其不好的加载延后的体验,后来经过摸索实验。将目录部分的内容放在iframe中,随页面dom结构加载,并在iframe的内的页面末端加上js,将iframe内的目录部分的内容替换主页面的目录部分的内容。
Continue reading