#1 jake

在上章,我们提及了:
在find,findAll,findSQL等多个查找函数以及update,delete等函数中出现的参数$conditions,除了可以是数组格式外,还可以是字符串的形式,而字符串形式的$conditions就如同SQL语句中的WHERE后面的条件字符串一样的使用。

也就是说:findAll/find等函数的第一个参数$conditions,不一定要是数组(代表AND条件),而且还可以是字符串(代表SQL语句中WHERE条件)。可以进行 OR(或)、LIKE(模糊查找)、复合OR和AND等的较复杂的查找。

如我们希望能够查询到guestbook表中,留言者名称为“jake或lin”的留言:

通常我们可以使用以下SQL语句来查找:

SELECT * FROM spgb_gb WHERE name = 'jake' OR name = 'lin'

那么,如何使用findAll来查询呢?

// 首先需要准备查找条件
$conditions = " name = 'jake' OR name = 'lin' ";
$gb = spClass('gb'); // 初始化留言本模型类
$result = $gb->findAll($conditions); // 查找
dump($result); // 查看结果,

请注意$conditions = " name = 'jake' OR name = 'lin' ";的这行代码,即是说,我们将上述SQL语句中在WHERE后面的条件,写到了findAll的第一个参数内,这样最终就可以达到SQL语句的查询结果了。

下面我们再举一些例子:

1. 复合 OR 和 AND的查询

查询名称为jake或lin的留言,而且留言的时间是在5月3日之后。

SELECT * FROM spgb_gb WHERE ( name = 'jake' OR name = 'lin' ) AND post_time > '2010-05-03 00:50:55'

而findAll就是:

$conditions = "  ( name = 'jake' OR name = 'lin' ) AND post_time > '2010-05-03 00:50:55' ";

$results = $gb->findAll($conditions);

2. like模糊查找

模糊查找在留言内容(contents)中有“SpeedPHP”一词的留言。

SELECT * FROM spgb_gb WHERE contents like '%SpeedPHP%'

而findAll是:


$conditions = "  contents like '%SpeedPHP%' '";

$results = $gb->findAll($conditions);

上面可以看到,SpeedPHP的findAll查询的能力是非常强大的,不仅可以查询AND条件的,还可以查询OR,like等条件的数据。而且,以上的一切,都是不需要写SQL语句即可查询,大大方便了开发者日常的查找需要。


2012-08-04 16:16:12