简洁查询语法


在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模板, 使用方法类似