子分类
  • 无子分类
Where类在 Select、Update、Delete中的用法
  • 2014-07-02发布
  • 2014-07-02修改

在Select、Update、Delete中,where方法的参数格式为:

where($where,$relation = Sql::SQL_AND);


$relation 可选用的常量:SQL_AND、SQL_OR。


$where的格式分3种:

1.字符串,如:

$select->where('a.document_cate_id = 1');


2.数组,如:

$select->where(array('a.is_public' => 1,'is_public_allow'=>1));


数组键名为表字段名,键值为条件值。有多对值时Where解析为AND连接。上面的where解析为:

WHERE a.is_public = 1 AND is_public_allow = 1;


如果你想要的不是等于条件,可以用下面的方式实现:

$select->where(ExprWhere::get(array('a.title' => '%' . $filter['keyword'] . '%'),
    SQL::SQL_LIKE));


上面where转成SQL语句就是:

WHERE a.title LIKE '%' . $filter['keyword'] . '%';


ExprWhere::get($expr,$type = Sql::SQL_EQ);

$expr 是一维数组。

$type 是条件关系,可选用的常量有:SQL_LIKE、SQL_IN、SQL_NOT_IN、SQL_EQ、SQL_GT、SQL_LT、SQL_GTE、SQL_LTE、SQL_NEQ。


有时候你希望使用mysql的内置函数,可以下面的方式实现:

$select->where(array('a.add_time'=>Expr::get('DATE_FORMAT(date,format)')),Sql::SQL_OR);


3.Where对象:

如果需要用到复杂的where结构,可以做子where:

$select->where(array('a.ducument_id' => 1));
$subWhere = new Where();
$subWhere->set(array('a.is_public' => 1,'is_public_allow'=>1));
$subWhere->set(array('a.user_id' =>$login['user_id']),Sql::SQL_OR);
$select->where($subWhere);


用上面的subWhere方式,我们可以组成如下sql:

WHERE (a.document_id = 1) AND ((a.is_public = 1 AND is_public_allow = 1) 
    OR (a.user_id = '{$login['user_id']}'));