Heim > Artikel > PHP-Framework > ThinkPHP-Datenbankoperations-Aggregationsabfrage, Zeitabfrage, erweiterte Abfrage
Die folgende Tutorial-Kolumne von thinkphp stellt Ihnen die Aggregationsabfrage, die Zeitabfrage und die erweiterte Abfrage von ThinkPHP-Datenbankoperationen vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!
Aggregationsabfrage
In Anwendungen verwenden wir häufig einige statistische Daten, z. B. die aktuelle Anzahl der Benutzer (oder diejenigen, die bestimmte Bedingungen erfüllen), die maximale Punktzahl aller Benutzer, die durchschnittliche Punktzahl der Benutzer usw ., ThinkPHP Für diese statistischen Operationen stehen eine Reihe integrierter Methoden zur Verfügung, darunter:
Anwendungsbeispiel:
Ermitteln Sie die Anzahl der Benutzer:
Db::table('think_user')->count(); // 助手函数 db('user')->count();
Oder basierend auf Feldstatistiken:
Db::table('think_user')->count('id'); // 助手函数 db('user')->count('id');
Ermitteln Sie die Anzahl der Benutzer Höchstpunktzahl:
Db::table('think_user')->max('score'); // 助手函数 db('user')->max('score');
Punkte abrufen Die Mindestpunktzahl von Benutzern größer als 0:
Db::table('think_user')->where('score>0')->min('score'); // 助手函数 db('user')->where('score>0')->min('score');
Durchschnittliche Punktezahl der Benutzer abrufen:
Db::table('think_user')->avg('score'); // 助手函数 db('user')->avg('score');
Statistik der Gesamtpunktzahl der Benutzer:
Db::table('think_user')->sum('score'); // 助手函数 db('user')->sum('score');
Zeitabfrage
Zeitvergleich
Verwenden Sie die Where-Methode. Die Where-Methode unterstützt den Zeitvergleich, zum Beispiel: // 大于某个时间
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']);
Der dritte Parameter kann in jedem gültigen Zeitausdruck und Ihrem Zeitfeld übergeben werden Der Typ wird automatisch identifiziert. Zu den unterstützten Zeittypen gehören Zeitstempel, Datum/Uhrzeit, Datum und int.
// 大于某个时间 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();Wenn Sie die Tageszeit, diese Woche, diesen Monat und dieses Jahr abfragen, kann dies auch vereinfacht werden zu:
// 获取今天的博客 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();Ab Version V5.0.5+ können Sie auch die folgende Methode verwenden um die Zeit abzufragen
// 获取今天的博客 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();Erweiterte Abfrage
Schnellabfrage
Die Schnellabfragemethode ist eine vereinfachte Möglichkeit, die gleichen Abfragebedingungen in mehreren Feldern zu schreiben, was kann Vereinfachen Sie das Schreiben von Abfragebedingungen in mehreren Feldern weiter. Verwenden Sie |, um eine ODER-Abfrage zu trennen, und verwenden Sie &, um eine UND-Abfrage zu trennen. Sie können beispielsweise die folgende Abfrage implementieren:
// 查询两个小时内的博客 db('blog') ->whereTime('create_time','2 hours') ->select();
Schnelle Abfrage unterstützt alle Abfrageausdrücke. Intervallabfrage
Intervallabfrage ist eine vereinfachte Möglichkeit, mehrere Abfragebedingungen für dasselbe Feld zu schreiben
, zum Beispiel:Db::table('think_user') ->where('name|title','like','thinkphp%') ->where('create_time&update_time','>',0) ->find();Die generierte SQL-Anweisung lautet:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%') AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1Intervall Abfrage Abfragebedingungen müssen mithilfe von Arrays definiert werden und alle Abfrageausdrücke werden unterstützt.
Die folgende Abfragemethode ist falsch:
Db::table('think_user') ->where('name',['like','thinkphp%'],['like','%thinkphp']) ->where('id',['>',0],['<>',10],'or') ->find();
Batch-Abfrage
Sie können bedingte Batch-Abfragen mit mehreren Bedingungen definieren, zum Beispiel:SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` > 0 OR `id` <> 10 ) LIMIT 1Die generierte SQL-Anweisung lautet:
Db::table('think_user') ->where('name',['like','thinkphp%'],['like','%thinkphp']) ->where('id',5,['<>',10],'or') ->find();
Closure query
Db::table('think_user'->'name' => ['like','thinkphp%'], 'title' => ['like','%thinkphp'], 'id' => ['>',0], 'status'=> 1->Die generierte SQL -Anweisung lautet:
SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 AND `status` = '1'use query -Objekt Abfrage Sie können das Abfragebobjekt auch im Voraus zusammenschließen und in die Auswahlmethode übergeben, z. B.
Db::table('think_user')->select(function($query){ $query->where('name','thinkphp') ->whereOr('id','>',10); });f Wenn Sie „Abfrage für Objekte“ verwenden, sind alle vor der Auswahlmethode aufgerufenen Kettenoperationen ungültig.
Gemischte Abfrage
Sie können alle zuvor genannten Methoden kombinieren, um gemischte Abfragen durchzuführen, zum Beispiel: SELECT * FROM `think_user` WHERE `name` = 'thinkphp' OR `id` > 10
Die generierte SQL-Anweisung lautet: $query = new \think\db\Query;$query->name('user') ->where('name','like','%think%') ->where('id','>',10) ->limit(10);
Db::select($query);
String-Bedingung. Abfrage
Für einige wirklich komplexe Abfragen können Sie auch direkt native SQL-Anweisungen zum Abfragen verwenden, wie zum Beispiel:
Db::table('think_user') ->where('name',['like','thinkphp%'],['like','%thinkphp']) ->where(function($query){ $query->where('id',['<',10],['>',100],'or'); }) ->select();Aus Sicherheitsgründen können wir Parameterbindung für Zeichenfolgenabfragebedingungen verwenden, wie zum Beispiel:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp') AND ( `id` < 10 or `id` > 100 )V5.0.4+ Beginnend ThinkPHP unterstützt das mehrfache Aufrufen von Abfragebedingungen für dasselbe Feld, zum Beispiel:
Db::table('think_user') ->where('id > 0 AND name LIKE "thinkphp%"') ->select();Shortcut-Methode (V5.0.5+)
V5.0.5+ hat eine Reihe von Verknüpfungsmethoden hinzugefügt, um Abfragen zu vereinfachen, darunter:
Das obige ist der detaillierte Inhalt vonThinkPHP-Datenbankoperations-Aggregationsabfrage, Zeitabfrage, erweiterte Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!