CakePHP-分页中的特殊查询
我想在MySQL上使用循环查询进行分页,即:CakePHP-分页中的特殊查询,php,mysql,cakephp,Php,Mysql,Cakephp,我想在MySQL上使用循环查询进行分页,即: SELECT *, ( 6371 * acos( cos( radians( $lat ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS di
SELECT *,
(
6371 * acos(
cos( radians( $lat ) ) * cos( radians( lat ) )
* cos( radians( lng )
- radians($lng)
)
+ sin( radians($lat)
) * sin( radians( lat ) ) ) ) AS distance
FROM {$this->table} HAVING distance < $dist
ORDER BY distance LIMIT $offset , $limit;
选择*,
(
6371*acos(
cos(弧度($lat))*cos(弧度(lat))
*cos(弧度(液化天然气)
-弧度(液化天然气)
)
+sin(弧度($lat)
)*sin(弧度(纬度)))作为距离
从距离小于$dist的{$this->table}
按距离限制订购$offset,$LIMIT;
不幸的是,我看到只有通过一些查询生成器才能工作
是否有一种方法可以在分页中使用此查询?因此,您可以在类声明之后添加虚拟字段,如下所示:
public function addDistanceVirtualField($lng, $lat) {
$this->virtualFields['distance'] = <<<EOT
(
6371 * acos(
cos( radians( $lat) ) * cos( radians( {$Model->alias}.lat ) )
* cos( radians( {$Model->alias}.lng )
- radians($lng)
)
+ sin( radians($lat)
) * sin( radians( {$Model->alias}.lat ) ) ) )
EOT;
}
公共功能addDistanceVirtualField($lng,$lat){
$this->virtualFields['distance']=alias}.lat)))
EOT;
}
您应该查看关于虚拟字段的部分:-另外,您可能对有兴趣。@标记我不能在这里使用虚拟字段,因为字段有两个参数,$lat
和$lng
。但我将在后面介绍geociding插件。这不是一个借口:)在链接的示例中,它还需要两个参数-看看代码。@mark我刚刚找到了它。文档中没有提到可以在类声明后添加虚拟字段。谢谢。我还是会用一种更干净的方法。但是,是的,基本上就是这样。