简洁查询语法
在CP中, 有两种SQL查询风格, 简洁查询语法共有3个方法, find()
用于获取分页数据
get()
获取单条记录
$this->link->get($table, '*', array('score' => 1));
参数列表
- string $table 表名
- string $fields 字段
- string|array $where 条件
getAll()
获取表中的所有数据
$this->link->getAll($table, '*');
参数列表
- string $table 表名
- string $fields 字段
- string|array $where 条件
- int|string $order 排序
- int|string $group_by 分组
- int|string $limit 0 表示无限制
find()
要返回带分页的数据可以使用find()
方法, find()
方法的第5个参数传入引用, 就可以返回分页数据
$this->link->find($table, '*', array(
'score' => array('>', 1),
), 'id DESC', $page);
分页参数需要包含以下值
array('p' => 1, 'limit' => 50)
p
表示当前页数, limit
表示一次取多少条, 如果传入了result_count
, 内部不再去计算当前条件下的总条数, 会根据result_count
返回相应的分页数据.
参数列表
- string $table 表名
- string $fields 字段名
- string|array $where 条件
- int $order 排序
- array $page 分页参数
- int $group_by 分组
工作原理
简介查询语法每个方法都有一个对应的SQL模板, 根据用户传参填充对应的SQL模板, 生成SQL语句来工作. 以get()方法为例, 当发起以下请求时
$this->link->get($table, '*', array('score' => 1));
首先会根据生成SQL语句的模板生成SQL语句和参数:
"SELECT %s FROM {$table} WHERE %s LIMIT 1"
然后依次执行以下操作:
prepare("SELECT * FROM user WHERE score = ?")->execute(array(1))->fetchAll()
根据模板我们可以推断get()
的参数含义, 第一个参数位于模板的FROM {$table} WHERE
之间, 那么要多表联合查询可以这样写:
$this->link->get(
"{$table} t LEFT JOIN {$this->t_exe_user} et ON t.uid=et.uid", '*', array(
't.uid' => 1
));
这时在服务器上的处理过程为:
prepare(
"SELECT *
FROM user t LEFT JOIN user_extends et ON t.uid=et.uid
WHERE t.uid = ? LIMIT 1"
)->execute(array(1))->fetchAll()
第二个参数位于SELECT %s FROM
之间, 如要取出表中score=1
的总记录可以这样写:
$this->link->get($table, 'count(*)', array(
'score' => 1
));
这时服务器上的处理过程为:
prepare(
"SELECT count(*) FROM user WHERE score = ? LIMIT 1"
)->execute(array(1))->fetchAll()
简洁查询方法的每个方法都对应一个SQL模板, 使用方法类似