#1 solo
我现在有一个表,三个字段
字段a(int),值为0或1
字段b(varchar),值为中文字符串
字段c (datetime)
需要几个查询:
1。查询字段a=0或1的所有数据
2。查询字段b包含'中文'的所有数据
3。查询字段a=1和字段b中包含'中文'的所有数据
4。查询某个时间段中,字段a=1和字段b中包含'中文'的所有数据。
以前用纯PHP写查询,判断get的值是否为空,分段生成sql语句即可。
现在用数组,真不知道该怎么写了。
另外就是分页代码如何写
<{pager pager=$pager myclass="yahoo2" c="main" a="index" a=$a b=$b c=$c offset=4}>
$a,$b,$c的值都不能为空吧
2010-08-16 16:00:41
#2 jake
首先,要明确 findAll的条件$conditions除了可以是数组之外,还可以是字符串!
然后,接收参数的时候,$this->spArgs('a', 1) 后面的1是默认值,你可以像下面一样判断
if( 1 == $this->spArgs('a', 1) ){
$conditions = " AND a = 1 "; // 这里类似你说的生成SQL,其实就是拼装where条件,所以要注意拼装时的 .= 和 =
}else{
$conditions = " AND a = 0 ";
}
其他的条件也差不多如此处理,比如说时间段,就可以用$ctime_before = $this->spArgs('t1');
$ctime_after = $this->spArgs('t2');
$conditions .= " AND c BETWEEN '{$ctime_befor}' AND '{$ctime_afte}' ";
最后一个spPager()->findAll($conditions)即可
分页的时候,$a,$b,$c都可以为空,因为前面说了,在接收的时候有默认值。
另外,需要注意的一点是,用字符串作为条件的时候,接收的参数最好先转一下类型,比如说1 == (int)$this->spArgs('a', 1) 或者用 spModel的escape
2010-08-16 17:04:20