<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                >[danger]取消`resultset_type`配置參數 數據集查詢結果不再受`resultset_type`配置參數影響,默認情況下,Db查詢統一返回數組,模型查詢統一返回模型對象和模型數據集對象。如果Db查詢的時候也需要返回數據集的話,可以顯式調用`fetchCollection`方法。 ## **查詢單個數據** 查詢單個數據使用`find`方法: ~~~ // table方法必須指定完整的數據表名 Db::table('think_user')->where('id', 1)->find(); //最終生成的SQL語句可能是: SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1 //多個條件查詢,詳情查看查詢表達式 $where=[['id','>',2],['age','<',18]]; Db::table('think_user')->where($where)->find(); ~~~ >[danger] `find`方法查詢結果不存在,返回`null`,否則返回結果數組 如果希望查詢數據不存在的時候返回空數組,可以使用 ~~~ // table方法必須指定完整的數據表名 Db::table('think_user')->where('id', 1)->findOrEmpty(); ~~~ 如果希望在沒有找到數據后拋出拋出一個`think\db\exception\DataNotFoundException`異常,可以使用 ~~~ Db::table('think_user')->where('id', 1)->findOrFail(); ~~~ ## **查詢數據集(多個數據)** 查詢多個數據(數據集)使用`select`方法: ~~~ Db::table('think_user')->where('status', 1)->select(); //最終生成的SQL語句可能是: SELECT * FROM `think_user` WHERE `status` = 1 //select方法查詢結果是一個數據集對象,如果需要轉換為數組可以使用 Db::table('think_user')->where('status', 1)->select()->toArray(); ~~~ 如果希望在沒有查找到數據后拋出拋出一個`think\db\exception\DataNotFoundException`異常,可以使用 ~~~ $res=Db::table('think_user')->where('status',1)->selectOrFail(); //返回的數據集沒有用toArray()轉換位數組時,不能用empty($res)判斷數據是否為空,而是使用isEmpty() if($res->isEmpty()){ } ~~~ 如果設置了數據表前綴參數的話,可以使用 ~~~ Db::name('user')->where('id', 1)->find(); Db::name('user')->where('status', 1)->select(); ~~~ >[danger] 如果你的數據表沒有設置表前綴的話,那么`name`和`table`方法效果一致。 在`find`和`select`方法之前可以使用所有的鏈式操作(參考鏈式操作章節)方法。 ## **值和列查詢** 查詢某個字段的值可以用value() 查詢結果不存在,返回 null ~~~ // 返回某個字段的值 Db::table('think_user')->where('id', 1)->value('name'); ~~~ 查詢某一列的值可以用column(); 查詢結果不存在,返回空數組 ~~~ // 返回數組 Db::table('think_user')->where('status',1)->column('name'); // 指定id字段的值作為索引 Db::table('think_user')->where('status',1)->column('name', 'id'); ~~~ 如果要返回完整數據,并且添加一個索引值的話,可以使用 ~~~ // 指定id字段的值作為索引 返回所有數據 Db::table('think_user')->where('status',1)->column('*','id'); ~~~ ## **數據分批處理** 如果你需要處理成千上百條數據庫記錄,可以考慮使用`chunk`方法,該方法一次獲取結果集的一小塊,然后填充每一小塊數據到要處理的閉包,該方法在編寫處理大量數據庫記錄的時候非常有用。 比如,我們可以全部用戶表數據進行分批處理,每次處理 100 個用戶記錄: ~~~ Db::table('think_user')->chunk(100, function($users) { foreach ($users as $user) { // } }); ~~~ 你可以通過從閉包函數中返回`false`來中止對后續數據集的處理: ~~~ Db::table('think_user')->chunk(100, function($users) { foreach ($users as $user) { // 處理結果集... if($user->status==0){ return false; } } }); ~~~ 也支持在`chunk`方法之前調用其它的查詢方法,例如: ~~~ Db::table('think_user') ->where('score','>',80) ->chunk(100, function($users) { foreach ($users as $user) { // } }); ~~~ `chunk`方法的處理默認是根據主鍵查詢,支持指定字段,例如: ~~~ Db::table('think_user')->chunk(100, function($users) { // 處理結果集... return false; },'create_time'); ~~~ 并且支持指定處理數據的順序。 ~~~ Db::table('think_user')->chunk(100, function($users) { // 處理結果集... return false; },'create_time', 'desc'); ~~~ > `chunk`方法一般用于命令行操作批處理數據庫的數據,不適合WEB訪問處理大量數據,很容易導致超時。 ## **游標查詢** 如果你需要處理大量的數據,可以使用新版提供的游標查詢功能,該查詢方式利用了PHP的生成器特性,可以大幅減少大量數據查詢的內存開銷問題。 `cursor`方法返回的是一個生成器對象,`user`變量是數據表的一條數據(數組)。 ~~~ $cursor = Db::table('user')->where('status', 1)->cursor(); foreach($cursor as $user){ echo $user['name']; } ~~~ ## **聚合查詢** 在應用中我們經常會用到一些統計數據,例如當前所有(或者滿足某些條件)的用戶數、所有用戶的最大積分、用戶的平均成績等等,ThinkPHP為這些統計操作提供了一系列的內置方法,包括: | 方法 | 說明 | | --- | --- | | count | 統計數量,參數是要統計的字段名(可選) | | max | 獲取最大值,參數是要統計的字段名(必須) | | min | 獲取最小值,參數是要統計的字段名(必須) | | avg | 獲取平均值,參數是要統計的字段名(必須) | | sum | 獲取總分,參數是要統計的字段名(必須) | >[danger] 聚合方法如果沒有數據,默認都是0,聚合查詢都可以配合其它查詢條件 用法示例 ~~~ //獲取用戶數:SELECT COUNT(*) AS tp_count FROM `think_user` LIMIT 1 Db::table('think_user')->count(); //或者根據字段統計:SELECT COUNT(id) AS tp_count FROM `think_user` LIMIT 1 Db::table('think_user')->count('id'); //獲取用戶的最大積分:SELECT MAX(score) AS tp_max FROM `think_user` LIMIT 1 Db::table('think_user')->max('score'); //如果你要獲取的最大值不是一個數值,可以使用第二個參數關閉強制轉換 Db::table('think_user')->max('name',false); //獲取積分大于0的用戶的最小積分: Db::table('think_user')->where('score', '>', 0)->min('score'); Db::table('think_user')->where('score', '>', 0)->min('name',false); //獲取用戶的平均積分:SELECT AVG(score) AS tp_avg FROM `think_user` LIMIT 1 Db::table('think_user')->avg('score'); //統計用戶的總成績:SELECT SUM(score) AS tp_sum FROM `think_user` LIMIT 1 Db::table('think_user')->where('id',10)->sum('score'); ~~~ 如果你要使用`group`進行聚合查詢,需要自己實現查詢,例如 ~~~ Db::table('score')->field('user_id,SUM(score) AS sum_score')->group('user_id')->select(); ~~~ ## **子查詢** 首先構造子查詢SQL,可以使用下面三種的方式來構建子查詢 **1、使用`fetchSql`方法** fetchSql方法表示不進行查詢而只是返回構建的SQL語句,并且不僅僅支持`select`,而是支持所有的CURD查詢。 ~~~ $subQuery = Db::table('think_user') ->field('id,name') ->where('id', '>', 10) ->fetchSql(true) ->select(); 生成的subQuery結果為: SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ~~~ **2、使用`buildSql`構造子查詢** buildSql返回字sql語句的符串 ~~~ $subQuery = Db::table('think_user') ->field('id,name') ->where('id', '>', 10) ->buildSql(); 生成的subQuery結果為: ( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ) ~~~ 調用`buildSql`方法后不會進行實際的查詢操作,而只是生成該次查詢的SQL語句(為了避免混淆,會在SQL兩邊加上括號),然后我們直接在后續的查詢中直接調用。 然后使用子查詢構造新的查詢: ~~~ Db::table($subQuery . ' a') ->where('a.name', 'like', 'thinkphp') ->order('id', 'desc') ->select(); 生成的SQL語句為: SELECT * FROM ( SELECT `id`,`name` FROM `think_user` WHERE `id` > 10 ) a WHERE a.name LIKE 'thinkphp' ORDER BY `id` desc ~~~ **3、使用閉包構造子查詢** `IN/NOT IN`和`EXISTS/NOT EXISTS`之類的查詢可以直接使用閉包作為子查詢,例如: ~~~ Db::table('think_user') ->where('id', 'IN', function ($query) { $query->table('think_profile')->where('status', 1)->field('id'); }) ->select(); 生成的SQL語句是 SELECT * FROM `think_user` WHERE `id` IN ( SELECT `id` FROM `think_profile` WHERE `status` = 1 ) ~~~ ~~~ Db::table('think_user') ->whereExists(function ($query) { $query->table('think_profile')->where('status', 1); })->find(); 生成的SQL語句為 SELECT * FROM `think_user` WHERE EXISTS ( SELECT * FROM `think_profile` WHERE `status` = 1 ) ~~~ >[danger] 除了上述查詢條件外,比較運算也支持使用閉包子查詢
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看