微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

组合查询

组合查询的主体还是采用数组方式查询,只是加入了一些特殊的查询支持包括字符串模式查询(_string)、复合查询(_complex)、请求字符串查询(_query),混合查询中的特殊查询每次查询只能定义一个,由于采用数组的索引方式,索引相同的特殊查询会被覆盖。

一、字符串模式查询(采用_string 作为查询条件)

数组条件还可以和字符串条件混合使用,例如:

$User = M("User"); // 实例化User对象

$map['id'] = array('neq',1);

$map['name'] = 'ok';

$map['_string'] = 'status=1 AND score>10';

$User->where($map)->select(); 

最后得到的查询条件就成了:

( `id` != 1 ) AND ( `name` = 'ok' ) AND ( status=1 AND score>10 )

二、请求字符串查询方式

请求字符串查询是一种类似于URL传参的方式,可以支持简单的条件相等判断。

$map['id'] = array('gt','100');

$map['_query'] = 'status=1&score=100&_logic=or';

得到的查询条件是:

`id`>100 AND (`status` = '1' OR `score` = '100')

三、复合查询

复合查询相当于封装了一个新的查询条件,然后并入原来的查询条件之中,所以可以完成比较复杂的查询条件组装。

例如:

$where['name']  = array('like','%thinkPHP%');

$where['title']  = array('like','%thinkPHP%');

$where['_logic'] = 'or';

$map['_complex'] = $where;

$map['id']  = array('gt',1);

查询条件是

( id > 1) AND ( ( name like '%thinkPHP%') OR ( title like '%thinkPHP%') )

复合查询使用了_complex作为子查询条件来定义,配合之前的查询方式,可以非常灵活的制定更加复杂的查询条件。

很多查询方式可以相互转换,例如上面的查询条件可以改成:

$where['id'] = array('gt',1);

$where['_string'] = ' (name like "%thinkPHP%")  OR ( title like "%thinkPHP") ';

最后生成sql语句是一致的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐