Maison > cadre php > PensezPHP > Requête d'agrégation des opérations de base de données ThinkPHP, requête temporelle, requête avancée

Requête d'agrégation des opérations de base de données ThinkPHP, requête temporelle, requête avancée

藏色散人
Libérer: 2021-01-28 08:54:40
avant
3827 Les gens l'ont consulté

La colonne tutorielle suivante de thinkphp vous présentera la requête d'agrégation, la requête temporelle et la requête avancée des opérations de base de données ThinkPHP. J'espère qu'elle sera utile aux amis dans le besoin !

Requête d'agrégation

Dans les applications, nous utilisons souvent certaines données statistiques, telles que tous les utilisateurs actuels (ou ceux qui remplissent certaines conditions) Nombre, points maximum de tous les utilisateurs, score moyen des utilisateurs, etc. ThinkPHP fournit une série de méthodes intégrées pour ces opérations statistiques, notamment :

Exemple d'utilisation :

Obtenez le nombre d'utilisateurs :

Db::table('think_user')->count();
// 助手函数
db('user')->count();
Copier après la connexion

Ou selon les statistiques de terrain :

Db::table('think_user')->count('id');
// 助手函数
db('user')->count('id');
Copier après la connexion

Obtenez le maximum de points d'utilisateurs :

Db::table('think_user')->max('score');
// 助手函数
db('user')->max('score');
Copier après la connexion

Obtenez le minimum de points d'utilisateurs dont les points sont supérieurs à 0 :

Db::table('think_user')->where('score>0')->min('score');
// 助手函数
db('user')->where('score>0')->min('score');
Copier après la connexion

Obtenir la moyenne des points de l'utilisateur :

Db::table('think_user')->avg('score');
// 助手函数
db('user')->avg('score');
Copier après la connexion

Statistiques du score total de l'utilisateur :

Db::table('think_user')->sum('score');
// 助手函数
db('user')->sum('score');
Copier après la connexion

Temps requête

Comparaison temporelle

Utilisez la méthode Where où

la méthode prend en charge la comparaison de temps, par exemple :

// 大于某个时间
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;]);
Copier après la connexion

Le troisième paramètre peut être transmis dans n'importe quelle expression de temps valide, et votre heure Le type de champ sera automatiquement reconnu. Les types d’heure pris en charge incluent les horodatages, la date et l’heure, la date et l’int.

Utiliser la méthode WhereTime

La méthode WhereTime fournit une requête rapide pour les champs de date et d'heure, l'exemple est le suivant :

// 大于某个时间
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();
Copier après la connexion

Expression temporelle

fournit également une requête d'expression temporelle plus pratique, par exemple :

// 获取今天的博客
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();
Copier après la connexion

Si vous interrogez l'heure de la journée, cette semaine, ce mois et cette année, elle peut également être simplifiée en :

// 获取今天的博客
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();
Copier après la connexion

À partir de la version V5.0.5+, vous pouvez également utiliser la méthode suivante pour interroger l'heure

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

Requête avancée

Requête rapide

La méthode de requête raccourcie est une manière simplifiée d'écrire plusieurs champs avec la même condition de requête , ce qui peut simplifier davantage la manière d'écrire une requête conditions. Utilisez | pour diviser entre plusieurs champs pour représenter la requête OR, utilisez & pour séparer la requête AND, vous pouvez implémenter la requête suivante, par exemple :

Db::table('think_user')    ->where('name|title','like','thinkphp%')    ->where('create_time&update_time','>',0)    ->find();
Copier après la connexion

La requête SQL générée est :

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%') AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1
Copier après la connexion

 La requête rapide prend en charge toutes les expressions de requête.

Requête d'intervalle

La requête d'intervalle est une sorte de multiple du même champ Écriture simplifiée des conditions de requête , par exemple :

Db::table('think_user')    ->where('name',['like','thinkphp%'],['like','%thinkphp'])    ->where('id',['>',0],['<>',10],'or')    ->find();
Copier après la connexion

L'instruction SQL générée est :

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1
Copier après la connexion

  Les conditions de requête de la requête par intervalle doivent utiliser la définition de tableau , et toutes les expressions de requête.

La méthode de requête suivante est incorrecte :

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

Requête par lots

peut définir des requêtes conditionnelles par lots avec plusieurs conditions, par exemple :

Db::table('think_user'->'name' => ['like','thinkphp%'],
        'title' => ['like','%thinkphp'],
        'id' => ['>',0],
        'status'=> 1->
Copier après la connexion

L'instruction SQL générée est :

SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 AND `status` = '1'
Copier après la connexion

Closure L'instruction SQL généré par l'interrogation

Db::table('think_user')->select(function($query){    $query->where('name','thinkphp')            ->whereOr('id','>',10);
});
Copier après la connexion

est :

SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10
Copier après la connexion

Utiliser l'objet Query pour interroger

peut également encapsuler l'objet Query à l'avance et le transmettre dans la méthode select, par exemple :

$query = new \think\db\Query;$query->name('user')    ->where('name','like','%think%')    ->where('id','>',10)    ->limit(10);
Db::select($query);
Copier après la connexion

 Si un objet Query est utilisé, toutes les opérations en chaîne appelées avant la méthode select ne seront pas valides.

Requête hybride

Vous pouvez combiner toutes les méthodes mentionnées précédemment pour effectuer une requête hybride, par exemple exemple :

Db::table('think_user')    ->where('name',['like','thinkphp%'],['like','%thinkphp'])    ->where(function($query){        $query->where('id',['<&#39;,10],[&#39;>',100],'or');
    })    ->select();
Copier après la connexion
est :

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` < 10 or `id` > 100 )
Copier après la connexion

Requête de condition de chaîne

Pour certaines requêtes pratiques, les requêtes complexes peuvent également être interrogées directement à l'aide d'instructions SQL natives, telles que :

Db::table('think_user')    ->where('id > 0 AND name LIKE "thinkphp%"')    ->select();
Copier après la connexion
Pour des raisons de sécurité, nous pouvons utiliser la liaison de paramètres pour les conditions de requête de chaîne, telles que :

Db::table('think_user')    ->where('id > :id AND name LIKE :name ',['id'=>0, 'name'=>'thinkphp%'])    ->select();
Copier après la connexion
V5 . À partir de la version 0.4+, ThinkPHP prend en charge l'appel de conditions de requête plusieurs fois sur le même champ, par exemple :

Db::table('think_user')    ->where('name','like','%think%')    ->where('name','like','%php%')    ->where('id','in',[1,5,80,50])    ->where('id','>',10)    ->find();
Copier après la connexion

Méthode de raccourci (V5.0.5+)

V5.0.5+ a ajouté une série de méthodes de raccourci pour simplifier les requêtes, notamment :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal