Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung der Verwendung von where() in ThinkPHP

Detaillierte Erklärung der Verwendung von where() in ThinkPHP

不言
不言Original
2018-06-06 14:36:382547Durchsuche

Dieser Artikel stellt hauptsächlich die Verwendung von where() in ThinkPHP vor. Er hat einen bestimmten Referenzwert. Jetzt können Freunde in Not darauf verweisen.

Die where-Methode kann Wird verwendet, um die Ergebnisse der Operation in der Datenbank zu filtern. Das heißt, die where-Klausel in der SQL-Abfrageanweisung. Dieser Artikel stellt Ihnen die detaillierte Erklärung der Verwendung von where() in ThinkPHP vor. Interessierte Freunde können sich auf

Dieser Artikel stellt die Verwendung der where()-Methode in ThinkPHP vor. Mit der where-Methode können die Ergebnisse von Datenbankoperationen gefiltert werden. Das heißt, die where-Klausel in der SQL-Abfrageanweisung.

Heute erzähle ich Ihnen von der Where-Methode, der am häufigsten verwendeten, aber auch komplexesten Abfrage. Die Where-Methode ist auch eine der kohärenten Operationsmethoden der Modellklasse und wird hauptsächlich für Abfragen verwendet und Einstellung der Betriebsbedingungen.

Die Verwendung der where-Methode ist die Essenz der ThinkPHP-Abfragesprache und ein wichtiger Teil und Höhepunkt des ThinkPHP ORM. Sie kann Abfragen abschließen, einschließlich gewöhnlicher Abfragen, Ausdrucksabfragen, schneller Abfragen, Intervallabfragen und kombinierter Abfragen Abfragen funktionieren. Die Parameter der where-Methode unterstützen Zeichenfolgen und Arrays. Obwohl auch Objekte verwendet werden können, wird dies nicht empfohlen.

String-Bedingungen

Verwenden Sie String-Bedingungen zur direkten Abfrage und Bedienung, zum Beispiel:

$User = M("User"); // 实例化User对象
$User->where('type=1 AND status=1')->select();

Die zuletzt generierte SQL-Anweisung lautet

SELECT * FROM think_user WHERE type=1 AND status=1

Wenn Sie Version 3.1 oder höher verwenden, wird bei Verwendung von Zeichenfolgenbedingungen eine Zusammenarbeit empfohlen mit Vorverarbeitungsmechanismus, um mehr Sicherheit zu gewährleisten, zum Beispiel:

$Model->where("id=%d and username='%s' and
xx='%f'",array($id,$username,$xx))->select();

oder verwenden Sie:

$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();

Wenn die $id-Variable aus einer Benutzerübermittlung oder einer URL-Adresse stammt und es sich um einen nicht numerischen Typ handelt, muss sie vor der Abfrage in ein numerisches Format formatiert werden.
Der Formattyp „String-Vorverarbeitung“ unterstützt die Angabe von Zahlen, Strings usw. Weitere Informationen finden Sie in der Parameterbeschreibung der vsprintf-Methode.

Array-Bedingung

Die Wo-Verwendung der Array-Bedingung ist die von ThinkPHP empfohlene Verwendung.

Normale Abfrage

Die einfachste Array-Abfragemethode ist wie folgt:

$User = M("User"); // 实例化User对象
$map['name'] = 'thinkphp';
$map['status'] = 1;
// 把查询条件传入查询方法
$User->where($map)->select();

Die endgültige generierte SQL-Anweisung ist

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1

Ausdrucksabfrage

oben Die Abfragebedingung ist nur eine einfache Gleichheitsbeurteilung. Sie können Abfrageausdrücke verwenden, um mehr SQL-Abfragesyntax zu unterstützen:

$map['字段1'] = array('表达式','查询条件1');
$map['字段2'] = array('表达式','查询条件2');
$Model->where($map)->select(); // 也支持

Ausdrücke Die folgenden Abfrageausdrücke werden unterstützt und haben die folgende Bedeutung:

Ausdrucksbedeutung

EQ ist gleich (= )
NEQ ist nicht gleich (a8093152e673feb7aba1828c43532094)
GT ist größer als (>)
EGT ist größer oder gleich (>=)
LT ist kleiner als (< ;)
ELT Kleiner oder gleich (<=)
LIKE Fuzzy-Abfrage
[NOT] BETWEEN (nicht) Intervallabfrage
[NOT] IN (nicht) IN Abfrage
EXP Ausdrucksabfrage, unterstützt SQL-Syntax

Beispiele sind wie folgt:

EQ: gleich (=)

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;eq&#39;,100);

und die folgende Abfrage. Die durch das Äquivalent

$map[&#39;id&#39;] = 100;

dargestellte Abfragebedingung ist id = 100

NEQ: Nicht gleich (a8093152e673feb7aba1828c43532094)

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;neq&#39;,100);

steht für die Abfragebedingungs-ID a8093152e673feb7aba1828c43532094 🎜>GT: größer als (>)

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;gt&#39;,100);

steht für die Abfragebedingungs-ID > 100

EGT: größer oder gleich (>=)

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;egt&#39;,100);

stellt die Abfragebedingungs-ID >= dar 100

LT: kleiner als (8102d70de8f017d8e101a29fc0c14ac4true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 status= 1 AND title = 'thinkphp' ,查询字段支持更多的,例如:

$map[&#39;status&score&title&#39;] =array(&#39;1&#39;,array(&#39;gt&#39;,&#39;0&#39;),&#39;thinkphp&#39;,&#39;_multi&#39;=>true);

查询条件就变成 status= 1 AND score >0 AND title = 'thinkphp'

注意:快捷查询方式中“|”和“&”不能同时使用。

区间查询

where方法支持对某个字段的区间查询,例如:

$map['id'] = array(array('gt',1),array('lt',10)) ;

得到的查询条件是: (`id` > 1) AND (`id` e61ff67c3a56450dd077c5c30f5f7ea1 3) OR (`id` 7eb01ffce09af3315351e8d3de2d76d7 3)
最后一个可以是AND、 OR或者 XOR运算符,如果不写,默认是AND运算。

区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKE、GT和EXP这样的表达式都可以支持。另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:

$map[&#39;name&#39;] = array(array(&#39;like&#39;,&#39;%a%&#39;), array(&#39;like&#39;,&#39;%b%&#39;), array(&#39;like&#39;,&#39;%c%&#39;), &#39;ThinkPHP&#39;,&#39;or&#39;);

最后的查询条件是:

(`name` LIKE &#39;%a%&#39;) OR (`name` LIKE &#39;%b%&#39;) OR (`name` LIKE &#39;%c%&#39;) OR (`name` = &#39;ThinkPHP&#39;)

组合查询

组合查询用于复杂的查询条件,如果你需要在查询的时候同时偶尔使用字符串却又不希望丢失数组方式的灵活的话,可以考虑使用组合查询。

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。

一、字符串模式查询(采用_string 作为查询条件)

数组条件还可以和字符串条件混合使用,例如:

$User = M("User"); // 实例化User对象
$map[&#39;id&#39;] = array(&#39;neq&#39;,1);
$map[&#39;name&#39;] = &#39;ok&#39;;
$map[&#39;_string&#39;] = &#39;status=1 AND score>10&#39;;
$User->where($map)->select();

最后得到的查询条件就成了:

( `id` != 1 ) AND ( `name` = &#39;ok&#39; ) AND ( status=1 AND score>10 )

二、请求字符串查询方式

请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。

$map[&#39;id&#39;] = array(&#39;gt&#39;,&#39;100&#39;);
$map[&#39;_query&#39;] = &#39;status=1&score=100&_logic=or&#39;;

得到的查询条件是:`id`>100 AND (`status` = '1' OR `score` = '100')

三、复合查询

复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。
例如:

$where[&#39;name&#39;] = array(&#39;like&#39;, &#39;%thinkphp%&#39;);
$where[&#39;title&#39;] = array(&#39;like&#39;,&#39;%thinkphp%&#39;);
$where[&#39;_logic&#39;] = &#39;or&#39;;
$map[&#39;_complex&#39;] = $where;
$map[&#39;id&#39;] = array(&#39;gt&#39;,1);

查询条件是

( id > 1) AND ( ( name like &#39;%thinkphp%&#39;) OR ( title like &#39;%thinkphp%&#39;) )

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。

很多查询方式可以相互转换,例如上面的查询条件可以改成:

$where[&#39;id&#39;] = array(&#39;gt&#39;,1);
$where[&#39;_string&#39;] = &#39; (name like "%thinkphp%") OR ( title like "%thinkphp") &#39;;

最后生成的SQL语句是一致的。

多次调用

3.1.3版本开始,where方法支持多次调用,但字符串条件只能出现一次,例如:

$map[&#39;a&#39;] = array(&#39;gt&#39;,1);
$where[&#39;b&#39;] = 1;
$Model->where($map)->where($where)->where(&#39;status=1&#39;)->select();

多次的数组条件表达式会最终合并,但字符串条件则只支持一次。

关于ThinkPHP中where()方法的使用,本文就介绍这么多,希望对您有所帮助,谢谢!

相关推荐:

ThinkPHP中redirect用法分析

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Verwendung von where() in ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn