QEEPHP---查询对象QDB_TABLE_SELECT

查询对象 QDB_Table_Select

查询对象用于从数据库查询符合条件的记录,并返回为数组或者 ActiveRecord 对象实例。

查询对象使用方法链来构造灵活的查询表达式,例如:
$table = new QDB_Table(...);

$rowset = $table->find(...)
                ->all(...)
                ->order(...)
                ->query();

查询对象的主要方法?

指定查询行为:

select() 指定 SELECT 子句后要查询的内容(字段、表达式)
where() 添加查询条件
order() 指定查询的排序
all() 指示查询所有符合条件的记录
limit() 限制查询结果总数
limitPage() 设置分页查询
getPageInfo() 获得查询后的分页信息
group() 指定 GROUP BY 子句
having() 指定 HAVING 子句的条件
forUpdate() 是否构造一个 FOR UPDATE 查询
distinct() 是否构造一个 DISTINCT 查询
ActiveRecord 相关:

asObject() 指示将返回的记录封装为特定的 ActiveRecord 对象
统计功能:

count() 统计符合条件的记录数
avg() 统计平均值
max() 统计最大值
min() 统计最小值
sum() 统计合计
执行:
query() 执行查询,并返回结果
辅助方法:

toString() 返回完整的 SQL 语句
对复杂查询条件的支持?

where() 支持的查询条件模式包括:

模式1:where(字符串, [查询参数1, 查询参数2, ...])
模式2:where(数组, [查询参数1, 查询参数2, ...])
where() 的两种解析模式?

如果第一个参数是字符串,则按照基本模式1进行解析; 如果第一个参数是数组,则按照模式2解析。

模式1的解析规则?

查询条件中字段名的解析:?
如果直接书写字段名,则不会进行任何处理
如果用“[ ]”(方括号)符号包括字段名,则该字段名会被提取出来进行转义处理
对于提取出来的字段名,还会解析是否包含表名称或关联名称
如果字段名包含关联名称,则字段名会转义为“关联表的表名称.字段名”
例如:
level_ix = 1 AND credits > 1000
[name] = 'php'
[posts.author] = 'dualface' AND [tags.name] = 'php'

会被解析为(假定当前表是 q_members,而 posts 关联和 tags 关联对应的数据表分别是 q_posts 和 q_tags):
level_ix = 1 AND credits > 1000
q_members.name = 'php'
q_posts.author = 'dualface' AND q_tags.name = 'php'

查询条件中参数占位符的解析:?
可以在查询条件中使用两种形式的参数占位符,分别是:

“?”(问号)匿名参数
“:”(冒号)开头的命名参数
例如:
level_ix = ?

`name` = :name

`post_id` IN (?)

`posts.author` = :author AND `tags.name` IN (:tags_name)

注意:不能在查询条件中混用匿名参数和命名参数

查询参数的解析:?
如果查询条件使用匿名参数,那么查询参数则按顺序处理。

例如:
where('level_ix = ? AND credits > ?', $level_ix, $credits)

如果查询条件使用命名参数,则 where() 方法的第二个参数必须是数组,并且以查询参数名为键名。

例如:
where(
    `posts.author` = :author AND `tags.name` IN :tags_name[]', 
    array(
        'author' => 'dualface',
        'tags_name' => array('php', 'book'),
    )
)

模式2的解析规则?

数组的每一个元素定义查询条件的一部分
如果元素是一个名值对,则假定为 字段名 对应 查询值
解析字段名是否包含表名称或关联名称
如果字段名包含关联名称,则字段名会转义为“关联表的表名称.字段名”
否则字段名转义为“当前表名称.字段名”
如果元素仅仅包含值,则假定为字符串查询条件
如果直接书写字段名,则不会进行任何处理
如果用“[ ]”(方括号)符号包括字段名,则该字段名会被提取出来进行转义处理
对于提取出来的字段名,还会解析是否包含表名称或关联名称
如果字段名包含关联名称,则字段名会转义为“关联表的表名称.字段名”
会解析字符串查询条件中包含的参数占位符
例如:
where(
    array('user_id' => $user_id)
)
// table.user_id = $user_id

where(
    array('user_id' => $user_id, 'level_ix' => 1)
)
// table.user_id = $user_id AND table.level_ix = 1

where(
    array('(', 'user_id' => $user_id, 'OR', 'level_ix' => $level_ix, ')', 'created > ?')
)
// (table.user_id = $user_id OR table.level_ix) AND created > ?

where(
    array('user_id' => array($id1, $id2, $id3))
)
// table.user_id IN ($id1, $id2, $id3)


转载于:https://my.oschina.net/zhangdapeng89/blog/38960

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值