【问题标题】:turning a complex query into cakephp pagination conditions将复杂的查询变成 cakephp 分页条件
【发布时间】:2014-03-22 10:35:39
【问题描述】:

我允许我的用户选择英里半径编号和位置,然后我试图返回该半径内的结果。网上有一堆教程,其中一个似乎有完美的查询

'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;'

但是我正在使用 cakephp,并且我想使用分页组件,所以我需要将该查询转换为一个条件数组,该数组选择所有标记和相关数据。谁能帮我吗?我是 cakephp 新手,在最好的情况下对 sql 绝对没用。

HAVING 位尤其令人困惑......

编辑

我现在正在使用此代码

$this->Paginator->settings = 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,
                                'conditions'=>array('distance < '.$miles)
        );
$data = $this->Paginator->paginate('Job');
$this->set(compact('data'));

至少正在运行查询,但我收到一条错误消息

Unknown column 'distance' in 'where clause'

有什么想法吗?

更多编辑

日志显示

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

看起来不错,但它现在根本没有从数据库中提取任何东西。这些选项中应该至少有 9 个

【问题讨论】:

    标签: php mysql sql cakephp pagination


    【解决方案1】:

    试试这个

    $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');
    

    【讨论】:

    • 是的 - 但我想使用分页功能 - 这是一个很好的后备计划,但我更喜欢通过分页组件
    • 嘿,这看起来应该可以工作,但正在返回我所有的标记。我正在使用 cakephp2.3,您的代码看起来与我的代码略有不同,所以我将尝试稍微不同
    • 我使用的是 2.1.1 版本。尝试限制 10 个然后你得到什么结果?
    • 查看对我的 qu 的编辑,我已将我正在尝试的代码放在那里。请注意,当我在您的代码之后检查我的 sql 日志时,没有任何 sin cos 等,这让我认为它一定不能选择新设置,因此尝试使用手册中的这种方式
    • 应用组而不是条件检查我编辑的答案
    猜你喜欢
    • 1970-01-01
    • 2012-12-03
    • 2012-08-27
    • 2017-07-06
    • 1970-01-01
    • 2013-06-08
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多