SQL查询语句 [2]

一、快捷查询

快捷查询方式是一种多字段查询的简化写法,在多个字段之间用‘|‘隔开表示OR,用‘&‘
隔开表示 AND。

1.不同字段相同查询条件

在  Home/controller/UserController.class.php   中插入

//使用相同查询条件
$user = M(‘User‘);
$map[‘user|email‘] = ‘蜡笔小新‘; //‘|‘换成‘&‘变成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 还要对应‘蜡笔小新‘的情况。而且,这设置要在放在数组最后。

如果不加 ‘_multi‘=> true 这行语句,则在调试中为:

//支持使用表达式结合快捷查询
$user = M(‘User‘);
$map[‘id&user‘] =  array( array(‘gt‘, 0),‘蜡笔小新‘,‘_multi‘=> true);
var_dump($user->where($map)->select());

其中 array(‘gt‘, 0) 在上一篇已经讲过了,是指大于0的数据,即id大于0的数据都符合条件

二、区间查询

ThinkPHP 支持对某个字段的区间查询。

//区间查询
$user = M(‘User‘);
$map[‘id‘] =  array( array(‘gt‘, 1),  array(‘lt‘, 4));
var_dump($user->where($map)->select());

即为符合id大于1且小于4的数据

//第三个参数设置逻辑OR
$user = M(‘User‘);
$map[‘id‘] =  array( array(‘gt‘, 1),  array(‘lt‘, 4), ‘OR‘);
var_dump($user->where($map)->select());

这是符合id大于1或者id小于4的数据。

三、组合查询

组合查询是基于索引数组查询方式的一个扩展性查询,添加了字符串查询(_string)、复
合查询(_complex)、请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。

1、字符串查询(_string)

//字符串查询(_string)
$user = M(‘User‘);
$map[‘id‘] =  array(‘eq‘, 1);
$map[‘_string‘] =‘user="蜡笔小新" AND email="[email protected]"‘;
var_dump($user->where($map)->select());

这时浏览器中调试的SQL查询方式为:

看到查询语句中的user和email都没有类似单引号``(键盘上1的左边的那个符号),这样的查询方式不大安全;

2、请求字符串查询(_query)

//请求字符串查询(_query)
$user = M(‘User‘);
$map[‘id‘] =  array(‘eq‘, 1);
$map[‘_query‘] =‘user=蜡笔小新&[email protected]&_logic=OR‘;
var_dump($user->where($map)->select());

这样的方式比较好用,也可以叫URL查询方式,只用&符号就可以,也不用添加单引号,且SQL的查询方式为:

可以看到这时候查询的语句中user和email都加上了``,这样的查询方式也比较安全。

另外说明一点的就是

$user =  M(‘User‘);
$map[‘id‘]=array(‘eq‘,1);
$map[‘id‘]=2;
var_dump($user->where($map)->select());

这时,SQL查询的就只有id=2的数据了,  $map[‘id‘]=2;  会将  $map[‘id‘]=array(‘eq‘,1);  覆盖掉

3、复合查询(_complex)

$user =  M(‘User‘);
$map[‘id‘]=array(‘eq‘,1);
$where[‘id‘]=2;
$map[‘_complex‘]=$where;
var_dump($user->where($map)->select());

这里新添加了一个数组$where,第2中方法中也说了   $map[‘id‘]=2;  会将 $map[‘id‘]=array(‘eq‘,1); 覆盖掉

使用复合查询后,对应的SQL查询语句为:

这时默认的连接符是AND,如果想换成或,则添加一条语句 $map[‘_logic‘]=‘OR‘; 即可

四、统计查询

查询有多少条目

$user =  M(‘User‘);
var_dump($user->count());

这时SQL查询语句为:

然后查询数据库中某一个名字下有多少条数据

首先我们的数据库是这样的

然后我们单独查询email下有多少条:

$user =  M(‘User‘);
var_dump($user->count(‘email‘));

查询后显示的结果为 string(1) "4"  这时我们手动添加一条数据

首先我们把email设置为可以为空,如下图所示

然后添加一条数据,这时email栏不添加任何数据,添加后如下图所示

这时,再查询email的有多少条时,显示的为 string(1) "4"  ,我们给user为‘李艳辉‘的email添加为‘[email protected]‘,再查询,则显示为 string(1) "5"

也就是字段总条数,遇到NULL不统计。

下面是查询数据库的一些其他的信息

var_dump($user->max(‘id‘));  查询id的最大值

var_dump($user->min(‘id‘)); 查询id的最小值

var_dump($user->avg(‘id‘)); 查询id的平均值

var_dump($user->sum(‘id‘)); 查询id的总值

五、动态查询

借助 PHP5 语言的特性,ThinkPHP 实现了动态查询。

1.getBy 动态查询

$user =  M(‘User‘);
var_dump($user->getByEmail(‘[email protected]‘));

直接查询email为[email protected]的数据

也可以使用 var_dump($user->getByUser(‘蜡笔小新‘)); 来获得该条目的数据

也就是getBy后面接的必须是建立的数据表中的名字

2、getFieldBy 动态查询

//通过user得到相对应id值
$user = M(‘User‘);
var_dump($user->getFieldByUser(‘路飞‘, ‘id‘));

这时,将id改为email,也可得到eamil的值,但是getFieldByUser中第一个参数必须是user对应的名字。

同样的 getFieldByUser 也可以换成 getFieldByid 等,然后括号内第一个参数为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‘));
时间: 2024-07-29 09:04:51

SQL查询语句 [2]的相关文章

Hibernate 关于执行sql查询语句(转)

原文  http://www.yshjava.cn/post/543.html 主题 SQLHibernate Hibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的.通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类--SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询: session.creat

将Sql查询语句获取的数据插入到List列表里面

Sql查询语句获取的数据是分格式的,我们还用SqlDataReader来做,然后用IDataReader来接收读取,以下是代码: //我想查询一个用户表的信息,该用户有姓名,密码,信息三列 //1.定义一个用户类型的List数组,userInfo类的代码在下方 List<userInfo> userInfo = new List<userInfo>(); //2.我们要读取查询语句的数据,并且保存了.这里我们将使用IDataReader语句 //数据库类的实例,类的代码在下方 DB

如何编写高效的SQL查询语句

概述 如何编写性能比较高的SQL查询语句呢?两个方法:创建合理的索引:书写高效的SQL语句 索引的基本原理 索引分为聚集索引和非聚集索引.一个表只能创建一个聚集索引和N个非聚集索引,这句话的由来主要是由于索引的原理决定的. 数据库中的一张表不论你创建不创建索引,或者,不论你创建那种类型的索引,其在硬盘上的存储是一样的,那么,创建索引和不创建索引,或者,创建聚集索引和非聚集索引的区别在什么地方呢? 其区别是表内数据在内存的存在形式.对于没有创建索引的表,其加载到内存里时,就只有数据块:对于有聚集索

Java连接MySQL数据库实现用户名密码的验证方法 Java语句中sql查询语句&#39;&#39; &quot;&quot;作用

//方法一,可以验证登录,但方法不实用.package com.swift; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class Logi

SQL查询语句 group by后, 字符串合并

原文:SQL查询语句 group by后, 字符串合并 合并列值 --******************************************************************************************* 表结构,数据如下: id value ----- ------ 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到结果: id values ------ ----------- 1 aa,bb 2 aaa,bbb,ccc 即:gr

(转)经典SQL查询语句大全

一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4.说明:创建

Java 获取SQL查询语句结果

step1:构造连接Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db","root","123"); step2:构造语句String sql = "select username,password from t_user where

工作中常用SQL 查询语句备忘

--当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列.select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name --求和查询 create table #tmp(rq varchar(10), shengfu nchar(1)) insert into #tmp values('2005-05-09','胜') insert into #tm

EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbContext()) { ctx.Database.ExecuteSqlCommand("UPDATE Person SET Name = 'Michael' WHERE PersonID = 1"); } 二 : Database.SqlQuery<T>   EF5执行sql查询语句

15个初学者必看的基础SQL查询语句

本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插入SQL 我们在开始创建数据表和向表中插入演示数据之前,我想给大家解释一下实时数据表的设计理念,这样也许能帮助大家能更好的理解SQL查询. 在数据库设计中,有一条非常重要的规则就是要正确建立主键和外键的关系. 现在我们来创建几个餐厅订单管理的数据表,一共用到3张数据表,Item Master表.Order Master表和Order Detail表. 创建表: 创建Item Maste