中山php|最优网络中山做网站 中山php建站

最优良人

2011/09/06 at 16:10

FleaPHP的数据库查询条件汇总解析

本文将全面分析FleaPHP的数据库查询条件,包含字符串格式,数组格式,混合格式,in查询,or查询,关联查询等常用查询。

FleaPHP的数据库查询条件$conditions 参数可以是整数、字符串和数组三种类型:

1.如果 $conditions 参数是一个整数,则假定该整数为主键字段值。
view plaincopy to clipboardprint?
// 查询主键字段值为1的记录
$user = $tableUsers->find(1);

2.如果 $conditions 参数是一个字符串,则该字符串将直接作为查询条件,这种方式可以支持最灵活的查询条件。 例如:
view plaincopy to clipboardprint?
$conditions = 'id < 3'
$user = $tableUsers->find($conditions);
//生成的where字句为“WHERE id < 3”

3.1.如果 $conditions 参数是一个数组,且指定了键名和值,则查询条件中字段名为键名,字段值等于键值。例如:

// 查询id字段值为3的记录
$conditions = array(
'id' => '1',
);
$user = $tableUsers->find($conditions);
//生成的where字句为“WHERE `id` = 1”

3.2.如果 $conditions 参数是一个数组,但其中的元素没有键名, 则假定键值为自定义查询条件,例如:

$conditions = array('id = 1');
// 生成的where字句为“WHERE `id` = 1”
$user = $tableUsers->find($conditions);

3.3.$conditions 为数组时,可以混用字符串和键值对两种风格:

$conditions = array(
'id < 3',
'sex' => 'male',
);
$user = $tableUsers->find($conditions);
// 生成的where字句为“id < 3 AND `sex` = 'male'”
$conditions = array( 'id < 3', 'sex' => 'male',);$user = $tableUsers->find($conditions);// 生成的where字句为“id < 3 AND `sex` = 'male'”
$conditions 为数组时,多个查询条件之间将使用 AND 布尔运算符进行连接。

3.4.“in()”查询在FleaPHP中的实现

我们有时候要用到in这样的操作,那么在condition里面怎么写呢?

// 假如主键名为“id”,需要查询id的值为1、2、3其中之一,则可以这样写:
$condition = array(
'in()' => array(1,2,3),
)

那么如果不是主键的话怎么写了呢? 也很简单,提供键值对即可。例如:
view plaincopy to clipboardprint?
$condition = array(
'in()' => array(
'username' => array('username1','username2')
)
)

3.5 or查询的实现

当 $conditions 包含多个元素时,每一个数组元素都是下列格式的数组:
array(字段名, 值, 比较操作, 连接下一个条件的操作, 是否是自定义命令)如果“是否是自定义命令”为 true,则“字段名”为自定义的查询条件,而“值”和“比较操作”两项将被忽略。
“比较操作”的默认值是“=”;
“连接下一个条件的操作”的默认值是“AND”;
“是否是自定义命令”的默认值是 false。

$conditions = array(
array('username', 'dualface', '=', 'OR'),
array('user_level', 'vip', '>='),
);

生成的 sql 如下

WHERE `username` = 'dualface' OR `user_level` >= 'vip'

实例代码:
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('Field2','Value2','=','OR'),
array('Field3','Value3','>'),
);

3.6.关联表限制条件

上面介绍的都是相对于主表而言的,那么我们如何来操作关联表的条件呢?我们来看下面
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('mappingName.Field',$this->primaryKey,'=','OR'), //这里的field是指关联表中的字段 ,mappingName就是定义关联时候那个影像别名
array('Field2','Value2','>'),
);

4.find(),findAll()函数中其它参数的含义和用法如下:
find ( $ conditions,
$ sort = null,
$ fields = '*',
$ queryLinks = true
)
findAll ( $ conditions = null,
$ sort = null,
$ limit = null,
$ fields = '*',
$ queryLinks = true
)

4.1.$sort 参数指定查询时的排序方式,类型只能为字符串
例如 'created ASC' 表示按照“created”字段进行从小到大的排序。

4.2.$fields 参数指定查询结果中要包含哪些字段,类型可以为字符串或数组
当数据表的字段很多时,通过指定 $fields 参数可以避免查询不需要的字段,从而提高性能。
$fields 参数即可是以“,”逗号分隔的字段名,也可以是包含多个字段名的数组,例如:

$fields = array('title', 'created');
//也可以写成下面的字符串形式,两种写法作用相同,区别在于自动生成的字段名两边将会添加上“`”符号,以防止出现字段名与SQL关键字冲突的情况出现。建议手写时也加上“`”字符
$fields = 'title, created';
$user = $tableUsers->find('id < 10',NULL,$fields);
$fields = array('title', 'created');//也可以写成下面的字符串形式,两种写法作用相同,区别在于自动生成的字段名两边将会添加上“`”符号,以防止出现字段名与SQL关键字冲突的情况出现。建议手写时也加上“`”字符$fields = 'title, created';$user = $tableUsers->find('id < 10',NULL,$fields);
推荐使用数组,这样表数据入口处理起来更快一些。

4.3.$queryLinks表示是否启用关联查询,默认是启用的,即默认会查询关联表(前提是关联设置属性enabled是开启状态)

下一篇文章将讨论一下FleaPHP的数据表关联设置

标签:,
-