ThinkPHP和PHP一些查詢小技巧分享

來源:互聯網
上載者:User
本文主要和大家分享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後的輸出語句");    }  }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.