掌握Thinkphp3.2.0----SQL查询
首先,先谈一下对查询的理解:查询的对象是数据库中的数据表,一个或多个;查询的限制就是各种条件或要求;查询的结果=表对象+限制(条件)。
对数据表的操作(CRUD)查询是最复杂也是最关键的一步!'SELECT * FROM WHERE [condition]',WHERE是对基本的限制条件。
对象即数据库中数据表是不用变化的,需要变化的是查询的条件。
条件的形式
1.基本形式----字符串形式。万能形式,查询不安全(不会自动添加安全符号``),就相当于在前边的sql语句上连缀后边的条件。
$user = M('User');
//字符串的查询条件
$where_str = '`this is a string`';
//显示测试结果
$result = $user -> where($where_str) -> select();
var_dump($result);
结果:

可见就是在WHERE之后的条件中写入该字符串,也就该形式可以实现所有的WHERE关键字的SQL查询。
例如:
$user = M('User');
//字符串的查询条件
$where_str = 'id=1';
//显示测试结果
$result = $user -> where($where_str) -> select();
var_dump($result);
结果:

2.数组形式条件。还是针对WHERE查询,就是把WHERE查询的条件分开,例如id=1条件,分成 id 和 1两部分,写入数组id做键,1做值,另外写入控制符。
数组是比较推荐的形式,这里是数组形式,值是字符串或整型或浮点
例子:
$user = M('User');
//数组形式的条件
$condition['id'] = array(1);
//显示测试结果
$result = $user -> where($condition) -> select();
var_dump($result);
结果:

示例

3.对象形式的条件。和数组很像,只是更换了数据的载体为对象(stdClass空对象,PHP程序提供)

4.表达式查询。实际就是来更改条件中运算符的。根据运算符的不同可能有不同的结构,这种形式相对灵活,可以写出很复杂的SQL查询语句,不行不是还有一个自定义吗。
基本结构: 查询表达式格式:$map['字段名'] = array('表达式','查询条件');---数组形式,值是数组.查询条件可以是数组,只是对有的表达式没有作用,比如EQ


LIKE/NOTLIKE

BETWEEN/NOT BETWEEN
$user = M('User');
//表达式形式
// $map['id'] = array('BETWEEN','1,10');这两种形式一样
$map['id'] = array('BETWEEN',array(1,10));
$result = $user -> where($map) -> select();
var_dump($result);
IN/NOTIN-----IN是IN,BETWEEN是BETWEEN!
$user = M('User');
//表达式形式
$map['id'] = array('BETWEEN','1,10');
// $map['id'] = array('IN',array(1,6));这两种形式一样
$result = $user -> where($map) -> select();
var_dump($result);
自定义形式:有点像连缀

还有几种其他的形式,多写,找到合适简便就可以了
快捷方式 | &



等价效果:
$user = M('User');
//快捷方式
$map['id&user'] = 1;
// 等价于
// $map['id'] = 1;
// $map['user'] = 1;
// $map['_logic'] = 'AND';
// 或等价于
// $condition = 'id=1 AND user=1';
$result = $user -> where($map) -> select();
var_dump($result);
和表达式结合:
$user = M('User');
//快捷方式
$map['id&user'] = array(array('NEQ',1),array('EQ',1),'_multi'=>true);
$result = $user -> where($map) -> select();
var_dump($result);
结果:
SELECT * FROM `think_user` WHERE ( (`id` <> 1) AND (`user` = 1) ) [ RunTime:0.001000s ]感觉这是最好的
还有,不一定是连个字段,可以是3个或多个字段
再:
$map['_string'] = '';连缀字符串,可以连接到其他条件上
$map['query'] = '';URL模式,比较方便
$map['_complex'] = '';被覆盖的时候使用
$user = M('User');
//组合查询
/* $map['id'] = 1;
$map['_string'] = 'user=1 AND email like 3';继续连接字符串形式的条件
*/
/* $map['id'] = 1;
$map['_query'] = 'user=1&email=2';//貌似运算符只能是=
*/
/* $where['id'] = 1;
$map['id'] = 1;
$map['_complex'] = $where;
$map['_logic'] = 'OR';
*/
$result = $user -> where($map) -> select();
var_dump($result);
统计查询:$user->count();
动态查询: getById() getFieldByUser();


SQL原生
query();读
excute();写
掌握Thinkphp3.2.0----SQL查询的更多相关文章
- SolrCloud6.1.0之SQL查询测试
Solr发展飞快,现在最新的版本已经6.1.0了,下面来回顾下Solr6.x之后的一些新的特点: (1)并行SQL特性支持,编译成Streaming 表达式,可以在solrcloud集群中,并行执行 ...
- thinkphp3.2 where 条件查询
thinkphp3.2 where 条件查询 在连贯操作中条件where的操作有时候自己很晕,所以整理下,有助于使用 查询条件 支持的表达式查询,tp不区分大小写 含义 TP运算符 SQL运算符 例子 ...
- 记一个简单的sql查询
在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...
- Oracle常用SQL查询(2)
三.查看数据库的SQL 1 .查看表空间的名称及大小 select t.tablespace_name, round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- SQL查询每个表的字段数量
--SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...
- sql查询语句如何解析成分页查询?
我们公司主要mysql存储数据,因此也封装了比较好用mysql通用方法,然后,我们做大量接口,在处理分页查询接口,没有很好分查询方法.sql查询 语句如何解析成“分页查询”和“总统计”两条语句.可能, ...
- 在Excel VBA中将SQL查询的结果赋值给变量的方法
直接上代码示例: nowdate为日期型变量 strSql = "select DISTINCT 日期 from new_ubi_data ORDER BY 日期 DESC Limit 0, ...
- 在php里写sql查询需要注意的事情
---恢复内容开始--- 今天往php里写了一条sql查询, $sql = "select * from videos where vuser=".$u: $ret = mysql ...
随机推荐
- Java高并发同步Volatile的使用
引言: 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”. 可见性的意思 ...
- 基于winner 滤波平稳降噪效果
https://en.wikipedia.org/wiki/Wiener_filter Wiener filter solutions The Wiener filter problem has so ...
- mysql触发器,答题记录表同步教学跟踪(用户列表)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABVQAAAOOCAIAAABgEw4AAAAgAElEQVR4nOy92VcT27r/zX+xLtflvt
- yii2.0 框架邮件的发送
第一步: 在main-local.php中的components中配置mailer: $config = [ 'components' => [ 'mailer' => [ 'class' ...
- seajs和requirejs
一.seajs 1. 使用seajs的一般步骤 a)在主页面引入sea.js b)写模块 c)在主页面使用模块 2.模块的写法 math.js define(function(require, exp ...
- Keywords Search(hdu 2222)
题意:给出n个单词,一篇文章,询问有几个单词在文章中出现过. /* AC自动机的裸题. 题目标号牛的一比. */ #include<cstdio> #include<cstring& ...
- AE开发中对GDB以及shapefile的读取、对FeatureClass的相关操作
读取gdb方法 private void btn_Click(object sender, EventArgs e) { FolderBrowserDialog dlg = new FolderBro ...
- poj 3280 Cheapest Palindrome
链接:http://poj.org/problem?id=3280 思路:题目给出n种m个字符,每个字符都有对应的添加和删除的代价,求出构成最小回文串的代价 dp[i][j]代表区间i到区间j成为回文 ...
- 给Android系统安装busybox
转自:http://blog.csdn.net/lxgwm2008/article/details/38925051 busybox号称Linux平台的瑞士军刀,它集成了100多个最常用的Linux命 ...
- QT error: cannot find -lGL
自己电脑新搭建的QT5.4.2编程环境,编译的第一个程序出现错误:error: cannot find -lGL 经查证,是找不到GL库,解决办法: sudo apt-get install libg ...