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

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

藏色散人
リリース: 2021-01-28 08:54:40
転載
3826 人が閲覧しました

次のチュートリアル コラムでは、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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート