本文主要和大家分享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']; //查詢期數是否已領滿9年 $hasGetYear = count(M('propertytake')->group('batchnum')->where($w)->select());//查詢當前資產在本期已收成的消耗資源數量 $w['batchnum'] = $setBatch; $temp_num = M('propertytake')->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:常用函數
a)fmod() 函數返回除法的浮點數餘數。 b)unset($saveData);銷毀數組c)strtotime(date('Y').'-01-01');把時間變為時間戳記的函數 d)isMobile();判斷目前使用者是否手機e)array_push($arr,$val);//$arr被添加的數組,$val為添加的值
5:thinkPHP的交易處理 例://開啟交易處理本機資料
M()->startTrans(); //提交 M()->commit(); //不提交 M()->rollback();
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後的輸出語句"); } }}