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();
Ou selon les statistiques de terrain :
Db::table('think_user')->count('id'); // 助手函数 db('user')->count('id');
Obtenez le maximum de points d'utilisateurs :
Db::table('think_user')->max('score'); // 助手函数 db('user')->max('score');
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');
Obtenir la moyenne des points de l'utilisateur :
Db::table('think_user')->avg('score'); // 助手函数 db('user')->avg('score');
Statistiques du score total de l'utilisateur :
Db::table('think_user')->sum('score'); // 助手函数 db('user')->sum('score');
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','2016-1-1'); // 时间区间查询 where('create_time','between time',['2015-1-1','2016-1-1']);
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('user') ->whereTime('birthday', '>=', '1970-10-1') ->select(); // 小于某个时间 db('user') ->whereTime('birthday', '<', '2000-10-1') ->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();
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();
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();
À 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();
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();
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
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();
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
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();
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->
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'
Closure L'instruction SQL généré par l'interrogation
Db::table('think_user')->select(function($query){ $query->where('name','thinkphp') ->whereOr('id','>',10); });
est :
SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10
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);
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',['<',10],['>',100],'or'); }) ->select();
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` < 10 or `id` > 100 )
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();
Db::table('think_user') ->where('id > :id AND name LIKE :name ',['id'=>0, 'name'=>'thinkphp%']) ->select();
Db::table('think_user') ->where('name','like','%think%') ->where('name','like','%php%') ->where('id','in',[1,5,80,50]) ->where('id','>',10) ->find();
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!