首先,先谈一下对查询的理解:查询的对象是数据库中的数据表,一个或多个;查询的限制就是各种条件或要求;查询的结果=表对象+限制(条件)。

对数据表的操作(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查询的更多相关文章

  1. SolrCloud6.1.0之SQL查询测试

    Solr发展飞快,现在最新的版本已经6.1.0了,下面来回顾下Solr6.x之后的一些新的特点: (1)并行SQL特性支持,编译成Streaming 表达式,可以在solrcloud集群中,并行执行  ...

  2. thinkphp3.2 where 条件查询

    thinkphp3.2 where 条件查询 在连贯操作中条件where的操作有时候自己很晕,所以整理下,有助于使用 查询条件 支持的表达式查询,tp不区分大小写 含义 TP运算符 SQL运算符 例子 ...

  3. 记一个简单的sql查询

    在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...

  4. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  5. MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?

    如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...

  6. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  7. SQL查询每个表的字段数量

    --SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...

  8. sql查询语句如何解析成分页查询?

    我们公司主要mysql存储数据,因此也封装了比较好用mysql通用方法,然后,我们做大量接口,在处理分页查询接口,没有很好分查询方法.sql查询 语句如何解析成“分页查询”和“总统计”两条语句.可能, ...

  9. 在Excel VBA中将SQL查询的结果赋值给变量的方法

    直接上代码示例: nowdate为日期型变量 strSql = "select DISTINCT 日期 from new_ubi_data ORDER BY 日期 DESC Limit 0, ...

  10. 在php里写sql查询需要注意的事情

    ---恢复内容开始--- 今天往php里写了一条sql查询, $sql = "select * from videos where vuser=".$u: $ret = mysql ...

随机推荐

  1. time和datetime时间戳---python

    time模块 time模块提供各种操作时间的函数 说明:一般有两种表示时间的方式:        1.时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的 2.以数 ...

  2. 我常用的find命令

    查找某种类型文件中包含特定字符的文件 find /* -type f -name "*.php" |xargs grep "rename(" find ./|x ...

  3. Effective Python2 读书笔记2

    Item 14: Prefer Exceptions to Returning None Functions that returns None to indicate special meaning ...

  4. NHibernate3快速上手教程FluentNHibernate配置与DBHelper

    很多学习NHibernate的新手很容易卡在配置文件这一关,正所谓万事开头难,上手后再配合官方文档就比较容易了. 网上关于配置文件的资料非常多,但由于版本的问题,许多老的教程中都没有明确指出类库的版本 ...

  5. 451. Sort Characters By Frequency

    题目: Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Inp ...

  6. spring 的IoC的个人理解

    1.ioc IoC的概念介绍 ( a).依赖注入, 分为依赖 和 注入  , 其实依赖是一种耦合方式, 通过spirng在运行时将这种依赖关系完成, 达到解耦目的, 同时达到代码重用, 方便测试,更加 ...

  7. Python中使用递归输出嵌套列表并转化为大写

  8. iOS 线程间共享资源添加排它锁

    #import "ViewController.h" @interface ViewController () @property(nonatomic,strong)NSThrea ...

  9. MIT 6.828 JOS学习笔记3. Exercise 1.2

    这篇博文是对Lab 1中的Exercise 2的解答~ Lab 1 Exercise 2: 使用GDB的'si'命令,去追踪ROM BIOS几条指令,并且试图去猜测,它是在做什么.但是不需要把每个细节 ...

  10. System.Windows.Application.Current.Dispatcher.BeginInvoke

    System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>                        ...