【问题标题】:How to combine multiple queries in paginate如何在分页中组合多个查询
【发布时间】:2013-05-03 15:20:07
【问题描述】:

在我的应用程序中,我想通过邮政编码集成距离搜索。

$result['zipcode'] = $this->Locations->find('all', array('conditions' => array('plz' => $param)));
if (count($city['Plz']) > 1)
    $result['city'] = $this->Locations->find('all', array('conditions' => array('ort' => $city['Stadt']['name'], 'plz !=' => $city['Plz']['zipcode'])));
    $this->Locations->virtualFields['distance'] = 'ACOS(SIN(RADIANS(Locations.lat)) * SIN(RADIANS('.$city["Stadt"]["lat"].')) + COS(RADIANS(Locations.lat)) * COS(RADIANS('.$city["Stadt"]["lat"].')) * COS(RADIANS(Locations.lng) - RADIANS('.$city["Stadt"]["lng"].')) ) * 6380';
    $result['near'] = $this->Locations->find('all', array(
        'conditions' => array(
            'plz !=' => $param,
            'ort !=' => $city['Stadt']['name'],
        ),
        'order' => 'distance ASC'
    ));

我想按邮政编码、城市(如果城市有很多邮政编码)和附近的顺序显示结果,所以我这样做了。 但现在我想通过蛋糕分页对这个结果进行分页。 是否有可能使这些查询得到一个,即

$this->Locations->find('all', array('conditions' => array(
    'order' => 'RESULTS BY ZIPCODE, RESULTS BY CITY, RESULTS BY MISSMATCH ORDERED BY DISTANCE'
)));

你会如何解决这个问题?

M.

【问题讨论】:

    标签: cakephp pagination multiple-select


    【解决方案1】:

    在 CakePHP 中,您可以通过关联数组指定多个要排序的字段;

    $this->MyModel->find('all', array(
        'conditions' => array(/* .... */),
        'order' => array(
            'MyModel.field1' => 'asc',
            'MyModel.field2' => 'desc',
            'MyModel.field3' => 'asc',
        )
    );
    

    【讨论】:

    • 我知道,但是我想将 3 种请求合并为一个,所以我首先得到邮政编码匹配的所有结果,其次是城市匹配的结果,最后是城市和邮政编码不匹配的所有其他结果按距离排序。
    • 嗯,为什么不在单个查询中执行这些搜索,而不是“过滤”,“排名”结果?
    • 我不想手动设置连接,因为这个模型有关联,我开始创建我的应用程序。我不知道我是否添加或删除了一些关联。有没有办法从 beforeFind 中的模型中获取完整的查询字符串并在不采取任何操作的情况下退出?
    猜你喜欢
    • 2013-03-13
    • 2012-11-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多