ThinkPHP及PHP查询小技巧

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就排在最前面,其他的排在最后面

你可能感兴趣的:(thinkPHP,PHP)