Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP-分页中的特殊查询_Php_Mysql_Cakephp - Fatal编程技术网

CakePHP-分页中的特殊查询

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

我想在MySQL上使用循环查询进行分页,即:

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我刚刚找到了它。文档中没有提到可以在类声明后添加虚拟字段。谢谢。我还是会用一种更干净的方法。但是,是的,基本上就是这样。