ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP データベース操作集計クエリ、時間クエリ、高度なクエリ

ThinkPHP データベース操作集計クエリ、時間クエリ、高度なクエリ

藏色散人
藏色散人転載
2021-01-27 15:29:313797ブラウズ

次のチュートリアル コラムでは、ThinkPHP データベース操作の集計クエリ、時間クエリ、および高度なクエリを紹介します。 集計クエリ

アプリケーションでは、現在のすべてのユーザー (または特定の条件を満たすユーザー) の数などの統計データを使用することがよくあります。 、すべてのユーザーの最大ポイント、ユーザーの平均スコアなど。ThinkPHP には、これらの統計操作のための一連の組み込みメソッドが用意されています。

使用例:

ユーザー数を取得する:

Db::table('think_user')->count();
// 助手函数
db('user')->count();

またはフィールド統計に従って:

Db::table('think_user')->count('id');
// 助手函数
db('user')->count('id');

ユーザーの最大ポイントを取得する:

Db::table('think_user')->max('score');
// 助手函数
db('user')->max('score');

最小ポイントを取得するポイントが 0 より大きいユーザーの数:

Db::table('think_user')->where('score>0')->min('score');
// 助手函数
db('user')->where('score>0')->min('score');

ユーザーの平均ポイントを取得する:

Db::table('think_user')->avg('score');
// 助手函数
db('user')->avg('score');

ユーザーの合計スコアに関する統計:

Db::table('think_user')->sum('score');
// 助手函数
db('user')->sum('score');

#時間クエリ

#時間比較

#where メソッド where を使用する

このメソッドは時間比較をサポートしています。例:

// 大于某个时间
where('create_time','> time','2016-1-1');
// 小于某个时间
where('create_time','<= time&#39;,&#39;2016-1-1&#39;);
// 时间区间查询
where(&#39;create_time&#39;,&#39;between time&#39;,[&#39;2015-1-1&#39;,&#39;2016-1-1&#39;]);
3 番目のパラメータは、任意の有効な時間式で渡すことができます。サポートされる時間タイプには、タイムスタンプ、日付時刻、日付、整数が含まれます。

whereTime メソッドを使用する

whereTime メソッドは、日付と時刻のフィールドに対する簡単なクエリを提供します。例は次のとおりです。

// 大于某个时间
db(&#39;user&#39;)    ->whereTime('birthday', '>=', '1970-10-1')    ->select();
// 小于某个时间
db('user')    ->whereTime('birthday', '<&#39;, &#39;2000-10-1&#39;)    ->select();
// 时间区间查询
db('user')    ->whereTime('birthday', 'between', ['1970-10-1', '2000-10-1'])    ->select();
// 不在某个时间区间
db('user')    ->whereTime('birthday', 'not between', ['1970-10-1', '2000-10-1'])    ->select();
時間式

は、より便利な時間式クエリも提供します。例:

// 获取今天的博客
db('blog')    ->whereTime('create_time', 'today')    ->select();
// 获取昨天的博客
db('blog')    ->whereTime('create_time', 'yesterday')    ->select();
// 获取本周的博客
db('blog')    ->whereTime('create_time', 'week')    ->select();
// 获取上周的博客
db('blog')    ->whereTime('create_time', 'last week')    ->select();
// 获取本月的博客
db('blog')    ->whereTime('create_time', 'month')    ->select();
// 获取上月的博客
db('blog')    ->whereTime('create_time', 'last month')    ->select();
// 获取今年的博客
db('blog')    ->whereTime('create_time', 'year')    ->select();
// 获取去年的博客
db('blog')    ->whereTime('create_time', 'last year')    ->select();
今週、今月、今年の時刻をクエリする場合は、次のように簡略化することもできます。
// 获取今天的博客
db('blog')    ->whereTime('create_time', 'd')    ->select();
// 获取本周的博客
db('blog')    ->whereTime('create_time', 'w')    ->select();
// 获取本月的博客
db('blog')    ->whereTime('create_time', 'm')    ->select();
// 获取今年的博客
db('blog')    ->whereTime('create_time', 'y')    ->select();
バージョン V5.0.5 以降では、次のメソッドを使用して次のこともできます。時間をクエリする

// 查询两个小时内的博客
db('blog')    ->whereTime('create_time','2 hours')    ->select();

高度なクエリ

クイック クエリ

クイック クエリ メソッドは、複数のフィールドに同じクエリ条件を記述する簡素化された方法です。これにより、クエリ条件の記述がさらに簡素化されます。複数のフィールドを区切るには | を使用して OR クエリを表します。AND クエリを区切るには & を使用します。たとえば、次のクエリを実装できます:

Db::table('think_user')    ->where('name|title','like','thinkphp%')    ->where('create_time&update_time','>',0)    ->find();
生成されるクエリ SQL は次のとおりです:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%') AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1
クイック クエリはすべてのクエリ式をサポートします。

#インターバル クエリ

インターバル クエリは、複数のクエリの一種です。同じフィールド クエリ条件 の簡略化された記述方法、例:

Db::table('think_user')    ->where('name',['like','thinkphp%'],['like','%thinkphp'])    ->where('id',['>',0],['<>',10],'or')    ->find();
生成される SQL ステートメントは次のとおりです:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1

インターバル クエリのクエリ条件配列およびすべてのクエリ式で定義する必要があります。

次のクエリ方法が間違っています:

Db::table('think_user')    ->where('name',['like','thinkphp%'],['like','%thinkphp'])    ->where('id',5,['<>',10],'or')    ->find();

バッチ クエリ

複数の条件を使用してバッチ条件付きクエリを定義できます。例:

Db::table('think_user'->'name' => ['like','thinkphp%'],
        'title' => ['like','%thinkphp'],
        'id' => ['>',0],
        'status'=> 1->
生成される SQL ステートメントは次のとおりです:
SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 AND `status` = '1'

クロージャ クエリ

Db::table('think_user')->select(function($query){    $query->where('name','thinkphp')            ->whereOr('id','>',10);
});

生成される SQL ステートメントは次のとおりです:

SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10
クエリ オブジェクトを使用してクエリを実行しますクエリ オブジェクトを事前にカプセル化して渡すこともできます。例:
$query = new \think\db\Query;$query->name('user')    ->where('name','like','%think%')    ->where('id','>',10)    ->limit(10);
Db::select($query);

Query オブジェクトが使用されている場合、select メソッドの前に呼び出されたチェーン操作は無効になります。

#混合クエリ

上記のすべての方法を組み合わせて、混合クエリを実行できます。 :

Db::table('think_user')    ->where('name',['like','thinkphp%'],['like','%thinkphp'])    ->where(function($query){        $query->where('id',['<&#39;,10],[&#39;>',100],'or');
    })    ->select();
生成される SQL ステートメントは次のとおりです:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` < 10 or `id` > 100 )
文字列条件クエリ

一部の場合実践的な複雑なクエリは、ネイティブ SQL ステートメントを使用して直接クエリすることもできます (例:

Db::table('think_user')    ->where('id > 0 AND name LIKE "thinkphp%"')    ->select();
) 安全上の理由から、文字列クエリ条件にパラメータ バインディングを使用できます (例:
Db::table('think_user')    ->where('id > :id AND name LIKE :name ',['id'=>0, 'name'=>'thinkphp%'])    ->select();
V5)。 0.4 以降、ThinkPHP は同じフィールドでクエリ条件を複数回呼び出すことをサポートします。例:
Db::table('think_user')    ->where('name','like','%think%')    ->where('name','like','%php%')    ->where('id','in',[1,5,80,50])    ->where('id','>',10)    ->find();
ショートカット メソッド (V5.0.5)

V5.0.5 バージョンには、クエリを簡略化するための一連のショートカット メソッドが追加されました。

以上がThinkPHP データベース操作集計クエリ、時間クエリ、高度なクエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。