1:关联查询并有的字段名相同查询全部字段
$goodsNum = $cartlistM->field('*,a.id as cid')->join('Goods as b on a.goods_id = b.id')->where(array('a.id' =>$_POST['cartID'] ))->find();
2:查询按条件去处重复值的语句
M('propertytake')->group('batchnum')->where($w)->select();
3:在循环中去除查询selsect()中不符合条件的数组
foreach ($propertyArr as $key=>$val)
{
$w['mid'] = $this->mid;
$w['property_id'] = $val['id'];
//xxxxxx
$hasGetYear = count(M('tablename')->group('batchnum')->where($w)->select());
//查询当前资产在本期已收成的消耗资源数量
$w['batchnum'] = $setBatch;
$temp_num = M('tablename')->where($w)->sum('nums');
if(empty($temp_num))
{
$temp_num = 0;
}
if ($hasGetYear >= $goodsArr['getmaxnum']||$temp_num>=$val['totaltree']||$val['totaltree']<=0) { unset($propertyArr[$key]); }else { $treeNum += $val['totaltree']; } }
4:常用函数
由于内容增加单开一篇
5:thinkPHP的事务处理 例://开启事务处理本地数据&打印SQL语句
M()->startTrans();
//提交
M()->commit();
//不提交
M()->rollback();
//获取最后一条SQL语句
M()->getLastSql();
6:json解析json_decode();json加密json_encode(value);
7:调用父类(被继承类)
parent::memaddress($list['province'],$list['city'],$list['district']);//parent::是父的意思,memaddress是父类中的函数
8:查询方法之过滤查询
distanct(true)
例:
$data=M('user')->distanct(true)->field('score')->order('score asc')->select();
9:thinkPHP在字段值上自增或自减
$newM->where('id='.$cid)->setInc('browser',1); //browser字段值自增1,setDec是自减
10:各种循环(for forech …) 跳出循环return,break,continue三者区别
break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。 break不仅可以结束其所在的循环,还可结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。Java中的标签就是一个紧跟着英文冒号(:)的标识符。且它必须放在循环语句之前才有作用。
public class BreakTest2
{
public static void main(String[] args){
// 外层循环,outer作为标识符
outer:
for (int i = 0 ; i < 5 ; i++ ){
// 内层循环
for (int j = 0; j < 3 ; j++ ){
System.out.println("i的值为:" + i + " j的值为:" + j);
if (j == 1){
// 跳出outer标签所标识的循环。
break outer;
}
}
}
}
}
continue的功能和break有点类似,区别是continue只是中止本次循环,接着开始下一次循环。而break则是完全中止循环。
public class ContinueTest
{
public static void main(String[] args){
// 一个简单的for循环
for (int i = 0; i < 3 ; i++ ){
System.out.println("i的值是" + i);
if (i == 1){
// 忽略本次循环的剩下语句
continue;
}
System.out.println("continue后的输出语句");
}
}
}
return关键字并不是专门用于跳出循环的,return的功能是结束一个方法。 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
public class ReturnTest
{
public static void main(String[] args){
// 一个简单的for循环
for (int i = 0; i < 3 ; i++ ){
System.out.println("i的值是" + i);
if (i == 1){
return;
}
System.out.println("return后的输出语句");
}
}
}
11:登录失败后,出现验证码
用$_SESSION['err_num'] = $err_num;
记录并传出错误次数以进行判断
12:内置if标签condition接收session
PHP过滤器
验证邮箱是否符合邮箱格式
filter_var($email[$i], FILTER_VALIDATE_EMAIL)
filter_var() - 通过一个指定的过滤器来过滤单一的变量
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
filter_input - 获取一个输入变量,并对它进行过滤
filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
转载 更多过滤函数
thinkphp设置默认访问模块
// 绑定访问Admin模块
define('BIND_MODULE','Mobile');
清除 X-Powered-By:ThinkPHP
修改文件 xxxxxx\ThinkPHP\Library\Think\View.class.php
修改
header('X-Powered-By:ThinkPHP');
为
header('X-Powered-By:https://mp.csdn.net/mdeditor/79099716');
时间转为时间戳
$mytime=date("Y-m-d 0:0:0", strtotime("-1 day")); //获取前一天的时间
echo $mytime.'
';
echo strtotime($mytime);//转为时间戳
thinkphp I()方法过滤
I('post.email','',FILTER_VALIDATE_EMAIL);//表示 会对$_POST['email'] 进行 格式验证,如果不符合要求的话,返回空字符串。
参考链接
sql 排序一个字段值的后4位
SQL中还有一个SUBSTRING
SUBSTRING( ) 从字符串中提取一个或多个字符
//示例一显示电话号码的前三个字符(区号)
SELECT SUBSTRING(phone,1,3) FROM employee
//示例二:SQL中一个字段的值由汉字+4位数字组成的,查询结果不想包含后面的4位数字
select left(a, (len(a)-4) ) from 表名
//示例三:假如传进SQL需要查询的是 ‘ABC1234’
select * from Table where 列名 = Substring(‘ABC1234’,1,len(Substring)-4)
//示例1,2显示所需字符 示例3查询所需字符
SQL不规则排序,ORDER BY 不规则排序,case的使用
ORDER BY
case DisplaySize
when 'S' then 1
when 'M' then 2
when 'L' then 3
when 'XL' then 4
when 'XXL' then 5
when '3XL' then 6
end
//示例:
select * from 表名 where 字段名 in (1,12,10,13,11,31) order by case 字段名 when 1 then 1 when 12 then 2 when 10 then 3 when 13 then 4 when 11 then 5 when 31 then 6 end
model模型内表单验证
前端HTML
调用的model模型进行验证
15||strlen($data)<5)
return FALSE;
return true;
}
function modelTest(){
echo '测试的跨模型操作,调用模型中的方法';
}
}
?>
控制器调用模型完成主体
display();
}
function add(){
//经过自定义模型
$user=D('user');
if ($user->create()) {
if ($user->add()){
$this->success("注册成功");
}else{
$this->error($user->getError());
}
}else{
$this->error($user->getError());
}
}
}
?>
按天进行分组查询
//TIME为int格式时间戳的字段名,所以用FROM_UNIXTIME进行转换
// $num = -intval($_POST['num']);
// $time = strtotime(date("Y-m-d 0:0:0",strtotime("$num day")));
//TIME>=".$time." 为前n天内按每天进行数据统计
$sql="select count(id) as ids,FROM_UNIXTIME( regtime, '%Y-%m-%d' ) AS time from 表名 where TIME>=".$time." GROUP BY FROM_UNIXTIME( TIME, '%Y-%m-%d' ) order by id desc";
//如果是create_time时间格式用DATE_FORMAT
如果每组只取最新一条记录
select * from (
select * from table_name order by create_time desc limit 100000
) as t
group by t.id;
保留数字的小数点后4位
//更新
update 表名 set 字段名 = ROUND(字段名,4)
//查询
select cast(293209.5 as decimal(18,4)) from 表
Mysql查询按指定字段的指定值进行排序
select * from tablename order by (case when Age = 18 then 0 else 1 end)
//如果Age等于18就排在最前面,其他的排在最后面