Maison développement back-end tutoriel php ThinkPHP--SQL 查询语句

ThinkPHP--SQL 查询语句

Aug 08, 2016 am 09:31 AM
array gt map user where

一.查询方式

ThinkPHP 提供了三种基本的查询方式:字符串条件查询、索引数组条件查询和对象条
件查询。在大多数情况下,推荐使用索引数组和对象方式作为查询条件,因为会更加安全
1.使用字符串作为条件查询
//字符串作为条件查询
$user = M('User');
var_dump($user->where('id=1 AND user="蜡笔小新"')->select());
//最终生成的SQL 语句
SELECT * FROM `think_user` WHERE ( id=1 AND user="蜡笔小新" )
PS:where 查询方法里面只要包含条件即可,多个条件加上AND 等连接符即可。我们会
在SQL 连贯操作详细学习。
2.使用索引数组作为查询条件
//索引数组作为条件查询
$user = M('User');
$condition['id'] = 1;
$condition['user'] = '蜡笔小新';
var_dump($user->where($condition)->select());
//最终生成的SQL 语句
SELECT * FROM `think_user` WHERE ( `id` = 1 ) AND ( `user` = '蜡笔小
新' )
PS:索引数组查询的默认逻辑关系是AND,如果想改变为OR,可以使用_logic 定义查
询逻辑。
基于上面的代码增加如下一行:
$condition['_logic'] = 'OR'; //将默认AND 改成OR
3.使用对象方式来查询
//对象作为条件查询
$user = M('User');
$condition = new \stdClass();
$condition->id = 1;
$condition->user = '蜡笔小新';
var_dump($user->where($condition)->select());
//最终生成的SQL 语句
SELECT * FROM `think_user` WHERE ( `id` = 1 ) AND ( `user` = '蜡笔小
新' )
PS:stdClass 类是PHP 内置的类,可以理解为一个空类,在这里可以理解为把条件的
字段作为成员保存到stdClass 类里。而这里的'\'是将命名空间设置为根目录,否则会导
致当前目录找不到此类。使用对象和数组查询,效果是一样的,可以互换。在大多数情况下,
ThinkPHP 推荐使用数组形式更加高效。

二.表达式查询

对于那些要实现模糊判断的查询,比如大于、等于、小于之类的SQL查询,可以使用表
达式查询方式。
查询表达式格式:$map['字段名'] = array('表达式','查询条件');
表达式查询表
表达式含义
EQ 等于(=)
NEQ 不等于()
GT 大于(>)
EGT 大于等于(>=)
LT 小于(ELT 小于等于([NOT]LIKE 模糊查询
[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN查询
EXP 表达式查询,支持SQL语法
PS:表达式不区分大小写。
//EQ:等于(=)
$map['id'] = array('eq', 1); //where 为id=1
//NEQ:不等于()
$map['id'] = array('neq', 1); //where 为id1
//GT:大于(>)
$map['id'] = array('gt', 1); //where 为id>1
//EGT:大于等于(>=)
$map['id'] = array('egt', 1); //where 为id>=1
//LT:小于($map['id'] = array('lt', 1); //where 为id//ELT:小于等于($map['id'] = array('elt', 1); //where 为id//[NOT]LIKE:模糊查询
$map['user'] = array('like', '%小%'); //where 为like %小%
//[NOT]LIKE:模糊查询
$map['user'] = array('notlike', '%小%'); //where 为not like %小%
//[NOT]LIKE:模糊查询的数组方式
$map['user'] = array('like', array('%小%', '%蜡%'), 'AND');
//生成的SQL
SELECT * FROM `think_user` WHERE ( (`user` LIKE '%小%' AND `user`
LIKE '%蜡%') )
//[NOT] BETWEEN:区间查询
$map['id'] = array('between','1,3');
//where 为`id` BETWEEN '1' AND '2'
//同上等效
$map['id'] = array('between',array('1','3'));
//[NOT] BETWEEN:区间查询
$map['id'] = array('not between','1,3');
//where 为`id` NOT BETWEEN '1' AND '2'
//[NOT] IN:区间查询
$map['id'] = array('in','1,2,4');
//where 为`id` IN ('1','2','4')
//[NOT] IN:区间查询
$map['id'] = array('not in','1,2,4');
//where 为`id` NOT IN ('1','2','4')
//EXP:自定义
$map['id'] = array('exp','in (1,2,4)');
//where 为`id` NOT IN ('1','2','4')
PS:使用exp 自定义在第二个参数直接写where 语句即可
//EXP:自定义增加OR 语句
$map['id'] = array('exp', '=1');
$map['user'] = array('exp', '="蜡笔小新"');
$map['_logic'] = 'OR';
//WHERE 为( (`id` =1) ) OR ( (`user` ="蜡笔小新") )

三.快捷查询

快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'
隔开表示AND。
1.不同字段相同查询条件
//使用相同查询条件
$user = M('User');
$map['user|eemail'] = 'a'; //'|'换成'&'变成AND
var_dump($user->where($map)->select());
2.不同字段不同查询条件
//使用不同查询条件
$user = M('User');
$map['id&user'] = array(1,'蜡笔小新','_multi'=>true);
var_dump($user->where($map)->select());
PS:设置'_multi'为true,是为了让id 对应1,让user 对应'蜡笔小新',否则就
会出现id 对应了1 还要对应'蜡笔小新'的情况。而且,这设置要在放在数组最后。
//支持使用表达式结合快捷查询
$user = M('User');
$map['id&user'] = array(array('gt', 0),'蜡笔小新','_multi'=>true);
var_dump($user->where($map)->select());

四.区间查询

ThinkPHP 支持对某个字段的区间查询。
//区间查询
$user = M('User');
$map['id'] = array(array('gt', 1), array('lt', 4));
var_dump($user->where($map)->select());
//第三个参数设置逻辑OR
$user = M('User');
$map['id'] = array(array('gt', 1), array('lt', 4), 'OR');
var_dump($user->where($map)->select());

五.组合查询

组合查询是基于索引数组查询方式的一个扩展性查询,添加了字符串查询(_string)、复
合查询(_complex)、请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。
//字符串查询(_string)
$user = M('User');
$map['id'] = array('eq', 1);
$map['_string'] ='user="蜡笔小新" AND email="xiaoxin@163.com"';
var_dump($user->where($map)->select());
//请求字符串查询(_query)
$user = M('User');
$map['id'] = array('eq', 1);
$map['_query'] ='user=蜡笔小新&email=xiaoxin@163.com&_logic=OR';
var_dump($user->where($map)->select());
PS:这种方式是URL 方式,不需要加引号。
//复合查询(_complex)
$user = M('User');
$where['user'] = array('like', '%小%');
$where['id'] = 1;
$where['_logic'] = 'OR';
$map['_complex'] = $where;
$map['id'] = 3;
$map['_logic'] = 'OR';
var_dump($user->where($map)->select());
PS:复合查询可以构建更加复杂的查询,这里id=1 或者id=3 可以构建实现。

六.统计查询

ThinkPHP 提供了一些数据统计查询的方法。
//数据总条数
$user = M('User');
var_dump($user->count());
//字段总条数,遇到NULL不统计
$user = M('User');
var_dump($user->count('email'));
//最大值
$user = M('User');
var_dump($user->max('id'));
//最小值
$user = M('User');
var_dump($user->min('id'));
//平均值
$user = M('User');
var_dump($user->avg('id'));
//求总和
$user = M('User');
var_dump($user->sum('id'));

七.动态查询

借助PHP5 语言的特性,ThinkPHP 实现了动态查询。
1.getBy 动态查询
//查找email=xiaoin@163.com的数据
$user = M('User');
var_dump($user->getByemail('xiaoxin@163.com'));
2.getFieldBy 动态查询
//通过user得到相对应id值
$user = M('User');
var_dump($user->getFieldByUser('路飞', 'id'));

八.SQL 查询

ThinkPHP 支持原生SQL 查询。
1.query 读取
//查询结果集,如果采用分布式读写分离,则始终在读服务器执行
$user = M('User');
var_dump($user->query('SELECT * FROM think_user'));
2.execute写入
//更新和写入,如果采用分布式读写分离,则始终在写服务器执行
$user = M('User');
var_dump($user->execute('UPDATE think_user set user="蜡笔大新" WHERE
id=1'));
PS:由于子查询用了不少连贯操作,我们会在连贯操作讲解。

以上就介绍了ThinkPHP--SQL 查询语句,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Dead Rails - Comment apprivoiser les loups
4 Il y a quelques semaines By DDD
Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
2 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1660
14
Tutoriel PHP
1261
29
Tutoriel C#
1234
24
Comment Springboot lit-il les listes, les tableaux, les collections de cartes et les objets dans les fichiers YML ? Comment Springboot lit-il les listes, les tableaux, les collections de cartes et les objets dans les fichiers YML ? May 11, 2023 am 10:46 AM

application.yml définit la collection de listes. La première façon consiste à utiliser l'annotation @ConfigurationProperties pour obtenir toutes les valeurs de la collection de listes type:code:status:-200-300-400-500. le fichier de configuration. Ce qu'il faut noter ici, c'est que lors de la définition de la liste Collection, définissez d'abord un Bean de classe de configuration, puis utilisez l'annotation @ConfigurationProperties pour obtenir la valeur de la collection de liste. Nous expliquerons ici le rôle des annotations pertinentes. @Component remet la classe d'entité à la direction Spring @ConfigurationPropertie

Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Dec 29, 2023 pm 02:27 PM

De nombreux utilisateurs choisiront la marque Huawei lors du choix des montres intelligentes. Parmi eux, les Huawei GT3pro et GT4 sont des choix très populaires. De nombreux utilisateurs sont curieux de connaître la différence entre Huawei GT3pro et GT4. Quelles sont les différences entre Huawei GT3pro et GT4 ? 1. Apparence GT4 : 46 mm et 41 mm, le matériau est un miroir en verre + un corps en acier inoxydable + une coque arrière en fibre haute résolution. GT3pro : 46,6 mm et 42,9 mm, le matériau est du verre saphir + corps en titane/corps en céramique + coque arrière en céramique 2. GT4 sain : en utilisant le dernier algorithme Huawei Truseen5.5+, les résultats seront plus précis. GT3pro : ajout d'un électrocardiogramme ECG, d'un vaisseau sanguin et de la sécurité

Comment définir la carte du délai d'expiration en Java Comment définir la carte du délai d'expiration en Java May 04, 2023 am 10:13 AM

1. Contexte technique Dans le développement de projets réels, nous utilisons souvent des middlewares de mise en cache (tels que Redis, MemCache, etc.) pour nous aider à améliorer la disponibilité et la robustesse du système. Mais dans de nombreux cas, si le projet est relativement simple, il n’est pas nécessaire d’introduire spécifiquement un middleware tel que Redis pour augmenter la complexité du système afin d’utiliser la mise en cache. Java lui-même dispose-t-il donc de composants de mise en cache légers et utiles ? La réponse est bien sûr oui, et il existe plusieurs solutions. Les solutions courantes incluent : ExpiringMap, LoadingCache et un packaging basé sur HashMap. 2. Effets techniques pour réaliser les fonctions courantes du cache, telles qu'une stratégie de suppression obsolète, l'échauffement des données de hotspot 3. ExpiringMap3.

Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Aug 24, 2023 am 09:48 AM

Pourquoi l'outil Snipping ne fonctionne pas sous Windows 11 Comprendre la cause première du problème peut aider à trouver la bonne solution. Voici les principales raisons pour lesquelles l'outil de capture peut ne pas fonctionner correctement : L'assistant de mise au point est activé : cela empêche l'ouverture de l'outil de capture. Application corrompue : si l'outil de capture plante au lancement, il est peut-être corrompu. Pilotes graphiques obsolètes : des pilotes incompatibles peuvent interférer avec l'outil de capture. Interférence provenant d'autres applications : d'autres applications en cours d'exécution peuvent entrer en conflit avec l'outil de capture. Le certificat a expiré : une erreur lors du processus de mise à niveau peut provoquer ce problème. Solution simple. Celles-ci conviennent à la plupart des utilisateurs et ne nécessitent aucune connaissance technique particulière. 1. Mettez à jour les applications Windows et Microsoft Store

Comment convertir des objets en cartes en Java – en utilisant BeanMap Comment convertir des objets en cartes en Java – en utilisant BeanMap May 08, 2023 pm 03:49 PM

Il existe de nombreuses façons de convertir des javabeans et des cartes, telles que : 1. Convertir des beans en json via ObjectMapper, puis convertir json en map. Cependant, cette méthode est compliquée et inefficace. Après les tests, 10 000 beans ont été convertis en boucle. ça prend 12 secondes ! ! ! Non recommandé.2. Obtenez les attributs et les valeurs de la classe du bean via la réflexion Java, puis convertissez-les en paires clé-valeur correspondant à la carte. Cette méthode est la deuxième meilleure, mais elle est un peu plus gênante. 3. Grâce à la méthode net.sf.cglib.beans.BeanMap dans la classe, cette méthode est extrêmement efficace. La différence entre elle et la deuxième méthode est qu'en raison de l'utilisation du cache, le bean doit être initialisé lorsqu'il est utilisé pour la première fois. créé.

Optimiser les performances de la carte linguistique Go Optimiser les performances de la carte linguistique Go Mar 23, 2024 pm 12:06 PM

Optimisation des performances du langage Go map Dans le langage Go, map est une structure de données très couramment utilisée, utilisée pour stocker une collection de paires clé-valeur. Toutefois, les performances de la carte peuvent être affectées lors du traitement de grandes quantités de données. Afin d'améliorer les performances de la carte, nous pouvons prendre certaines mesures d'optimisation pour réduire la complexité temporelle des opérations cartographiques, améliorant ainsi l'efficacité d'exécution du programme. 1. Pré-allouer la capacité de la carte. Lors de la création d'une carte, nous pouvons réduire le nombre d'extensions de carte et améliorer les performances du programme en pré-attribuant la capacité. Généralement, nous

Quels sont les moyens d'implémenter la sécurité des threads pour Map en Java ? Quels sont les moyens d'implémenter la sécurité des threads pour Map en Java ? Apr 19, 2023 pm 07:52 PM

Méthode 1. Utilisez HashtableMapashtable=newHashtable(); C'est la première chose à laquelle tout le monde pense, alors pourquoi est-il thread-safe ? Jetez ensuite un œil à son code source. Nous pouvons voir que nos méthodes couramment utilisées telles que put, get et containKey sont toutes synchrones, elles sont donc thread-safe publicsynchronizedbooleancontainsKey(Objectkey){Entrytab[]=table;inthash=key. hashCode( );intindex=(hash&0x7FFFFFFF)%tab.leng

Comment configurer et utiliser le module map sur le serveur Nginx Comment configurer et utiliser le module map sur le serveur Nginx May 21, 2023 pm 05:14 PM

L'instruction map est fournie par le module ngx_http_map_module. Par défaut, nginx charge ce module sauf si artificiellement --without-http_map_module. Le module ngx_http_map_module peut créer des variables dont les valeurs sont associées aux valeurs d'autres variables. Permet la classification ou le mappage simultané de plusieurs valeurs​​à plusieurs valeurs différentes​​et le stockage dans une variable. La directive map est utilisée pour créer une variable, mais n'effectue l'opération de mappage de vue que lorsque la variable est acceptée. En traitant des requêtes qui ne font pas référence à des variables, il n'y a aucune pénalité de performances pour le module. 1.ngx_http_map_module syntaxe de la carte de description des instructions du module

See all articles