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

不言
Freigeben: 2023-03-30 07:56:01
Original
2511 Leute haben es durchsucht

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();
Nach dem Login kopieren

Die zuletzt generierte SQL-Anweisung lautet

SELECT * FROM think_user WHERE type=1 AND status=1
Nach dem Login kopieren

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();
Nach dem Login kopieren

oder verwenden Sie:

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

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();
Nach dem Login kopieren

Die endgültige generierte SQL-Anweisung ist

SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
Nach dem Login kopieren

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(); // 也支持
Nach dem Login kopieren

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

Ausdrucksbedeutung

EQ ist gleich (= )
NEQ ist nicht gleich (<>)
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);
Nach dem Login kopieren

und die folgende Abfrage. Die durch das Äquivalent

$map[&#39;id&#39;] = 100;
Nach dem Login kopieren

dargestellte Abfragebedingung ist id = 100

NEQ: Nicht gleich (<>)

Zum Beispiel:

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

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

Zum Beispiel:

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

steht für die Abfragebedingungs-ID > 100

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

Zum Beispiel:

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

stellt die Abfragebedingungs-ID >= dar 100

LT: kleiner als (<)

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;lt&#39;,100);
Nach dem Login kopieren

steht für die Abfragebedingungs-ID < 100

ELT: kleiner oder gleich (<=)

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;elt&#39;,100);
Nach dem Login kopieren

stellt die Abfrage dar Bedingungs-ID <= 100

[NOT] LIKE: Gleich wie SQL LIKE

Zum Beispiel:

$map[&#39;name&#39;] = array(&#39;like&#39;,&#39;thinkphp%&#39;);
Nach dem Login kopieren

The Die Abfragebedingung wird zu einem Namen wie „thinkphp%“.

Wenn der Parameter DB_LIKE_FIELDS konfiguriert ist, führen einige Felder auch automatisch Fuzzy-Abfragen durch. Wenn Sie beispielsweise Folgendes festlegen:

&#39;DB_LIKE_FIELDS&#39;=>&#39;title|content&#39;
Nach dem Login kopieren

, ändern sich die Abfragebedingungen, wenn Sie

$map[&#39;title&#39;] = &#39;thinkphp&#39;;
Nach dem Login kopieren

<🎜 verwenden >

Der Name wie „%thinkphp%“

unterstützt den Array-Modus, zum Beispiel


$map[&#39;a&#39;] =array(&#39;like&#39;,array(&#39;%thinkphp%&#39;,&#39;%tp&#39;),&#39;OR&#39;);
$map[&#39;b&#39;] =array(&#39;notlike&#39;,array(&#39;%thinkphp%&#39;,&#39;%tp&#39;),&#39;AND&#39;);
Nach dem Login kopieren

Die generierte Abfragebedingung lautet:

(a like &#39;%thinkphp%&#39; OR a like &#39;%tp&#39;) AND (b not like &#39;%thinkphp%&#39; AND b not like &#39;%tp&#39;)
Nach dem Login kopieren

[NOT] BETWEEN: Wie SQLs [not] between unterstützen Abfragebedingungen Zeichenfolgen oder Arrays, zum Beispiel:

$map[&#39;id&#39;] = array(&#39;between&#39;,&#39;1,8&#39;);
Nach dem Login kopieren

entspricht dem Folgenden:

$map[&#39;id&#39;] = array(&#39;between&#39;,array(&#39;1&#39;,&#39;8&#39;));
Nach dem Login kopieren

Die Abfragebedingung wird zu einer ID ZWISCHEN 1 UND 8

[NICHT ] IN: Wie SQL [nicht] in unterstützen Abfragebedingungen Zeichenfolgen oder Arrays, zum Beispiel:

$map[&#39;id&#39;] = array(&#39;not in&#39;,&#39;1,5,8&#39;);
Nach dem Login kopieren

entspricht dem Folgenden:

$map[&#39;id&#39;] = array(&#39;not in&#39;,array(&#39;1&#39;,&#39;5&#39;,&#39;8&#39;));
Nach dem Login kopieren

Die Abfragebedingung wird zu id NOT IN (1,5, 8)

EXP: Ausdruck, der komplexere Abfragesituationen unterstützt

Zum Beispiel:

$map[&#39;id&#39;] = array(&#39;in&#39;,&#39;1,3,8&#39;);
Nach dem Login kopieren

可以改成:

$map[&#39;id&#39;] = array(&#39;exp&#39;,&#39; IN (1,3,8) &#39;);
Nach dem Login kopieren

exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。

查询表达式不仅可用于查询条件,也可以用于数据更新,例如:

$User = M("User"); // 实例化User对象
// 要修改的数据对象属性赋值
$data[&#39;name&#39;] = &#39;ThinkPHP&#39;;
$data[&#39;score&#39;] = array(&#39;exp&#39;,&#39;score+1&#39;);// 用户的积分加1
$User->where(&#39;id=5&#39;)->save($data); // 根据条件保存修改的数据
Nach dem Login kopieren

快捷查询

where方法支持快捷查询方式,可以进一步简化查询条件的写法,例如:

一、实现不同字段相同的查询条件

$User = M("User"); // 实例化User对象
$map[&#39;name|title&#39;] = &#39;thinkphp&#39;;
// 把查询条件传入查询方法
$User->where($map)->select();
Nach dem Login kopieren

查询条件就变成 name= 'thinkphp' OR title = 'thinkphp'

二、实现不同字段不同的查询条件

$User = M("User"); // 实例化User对象
$map[&#39;status&title&#39;] =array(&#39;1&#39;,&#39;thinkphp&#39;,&#39;_multi&#39;=>true);
// 把查询条件传入查询方法
$User->where($map)->select();
Nach dem Login kopieren

'_multi'=>true必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成 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);
Nach dem Login kopieren

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

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

区间查询

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

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

得到的查询条件是: (`id` > 1) AND (`id` < 10)

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

得到的查询条件是: (`id` > 3) OR (`id` < 10)

$map['id'] = array(array('neq',6),array('gt',3),'and');

得到的查询条件是:(`id` != 6) AND (`id` > 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;);
Nach dem Login kopieren

最后的查询条件是:

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

组合查询

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

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持,包括字符串模式查询(_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();
Nach dem Login kopieren

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

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

二、请求字符串查询方式

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

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

得到的查询条件是:`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);
Nach dem Login kopieren

查询条件是

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

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

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

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

最后生成的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();
Nach dem Login kopieren

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

关于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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage