Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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_Sql_Cakephp_Pagination - Fatal编程技术网

将复杂查询转换为cakephp分页条件

将复杂查询转换为cakephp分页条件,php,mysql,sql,cakephp,pagination,Php,Mysql,Sql,Cakephp,Pagination,我允许我的用户选择一个英里半径数字和一个位置,然后我尝试返回该半径范围内的结果。网上有很多教程,其中一个似乎有完美的查询 'SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVIN

我允许我的用户选择一个英里半径数字和一个位置,然后我尝试返回该半径范围内的结果。网上有很多教程,其中一个似乎有完美的查询

'SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;'
有什么想法吗

更多编辑

日志正在显示

SELECT `Job`.`id`, ( 3959 * acos( cos( radians(37) ) * cos(radians( 54.59728500000001 ) ) * cos( radians( -5.930119999999988 ) - radians(-122) ) + sin( radians(37) ) * sin(radians( 54.59728500000001 ) ) ) ) AS distance FROM `trainnation`.`jobs` AS `Job` LEFT JOIN `trainnation`.`users` AS `User` ON (`Job`.`user_id` = `User`.`id`) LEFT JOIN `trainnation`.`courses` AS `Course` ON (`Job`.`course_id` = `Course`.`id`) WHERE 1 = 1 GROUP BY distance having distance < 49 LIMIT 20
选择'Job`.'id`、(3959*acos(cos(radians(37))*cos(radians(54.5972850000001))*cos(radians(-5.930119999999988)-radians(-122))+sin(radians(37))*sin(radians(54.5972850000001)),作为与'trainination'的距离。将'Job'作为'Job'左键加入'trainination'。'users'作为'User'('Job`.'User\u id`='User`.'id`)左键将'training`.'courses`作为'courseon'('Job`.'courseu id`='courses`.'id`)上的'courses`连接,其中1=1组距离小于49限制20
这看起来不错,但它现在根本没有从数据库中提取任何东西。这些选项中至少应该有9个

试试这个

$this->paginate = array('fields'=>array('id','( 3959 * acos( cos( radians(37) ) * cos(radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin(radians( lat ) ) ) ) AS distance '),
'limit' => 20,
'group'=>'distance having distance < 25 ')
);
$marker_data = $this->paginate('Marker');
$this->paginate=array('fields'=>array('id'),'(3959*acos(cos(radians(37))*cos(radians(lat))*cos(radians(lng)-radians(-122))+sin(radians(37))*sin(radians(lat)))作为距离),
“限制”=>20,
“组”=>“距离小于25”的距离)
);
$marker_data=$this->paginate('marker');

是的-但我想使用paginate函数-这是一个很好的后备计划,但我更喜欢通过pagination组件。在那里,它看起来应该可以工作,但会返回我所有的标记。我使用的是cakephp2.3,您的代码看起来与我使用的略有不同,所以我将尝试使用与2.1.1版稍有不同的版本。尝试限制10,然后你会得到什么结果?检查我的qu的编辑,我已经把我现在尝试的代码放在那里了。请注意,当我在您的代码之后检查我的sql日志时,没有任何sin-cos等,这使我认为它不能拾取新设置,因此尝试使用manualapply组的方法,而不是条件检查我编辑的答案
SELECT `Job`.`id`, ( 3959 * acos( cos( radians(37) ) * cos(radians( 54.59728500000001 ) ) * cos( radians( -5.930119999999988 ) - radians(-122) ) + sin( radians(37) ) * sin(radians( 54.59728500000001 ) ) ) ) AS distance FROM `trainnation`.`jobs` AS `Job` LEFT JOIN `trainnation`.`users` AS `User` ON (`Job`.`user_id` = `User`.`id`) LEFT JOIN `trainnation`.`courses` AS `Course` ON (`Job`.`course_id` = `Course`.`id`) WHERE 1 = 1 GROUP BY distance having distance < 49 LIMIT 20
$this->paginate = array('fields'=>array('id','( 3959 * acos( cos( radians(37) ) * cos(radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin(radians( lat ) ) ) ) AS distance '),
'limit' => 20,
'group'=>'distance having distance < 25 ')
);
$marker_data = $this->paginate('Marker');