2013-05-03 2 views
0

인 여러 검색어를 결합하는 방법 우편 번호 별 거리 검색을 통합하고 싶습니다.내 앱에서 페이지 번호가

$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.

답변

0
당신이 연관 배열을 통해에 정렬 여러 필드를 지정할 수 있습니다 CakePHP의에서

;

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

내가 알고,하지만 난 하나에 결합하려는 요청 3 종류가있다, 그래서 내가 우편 번호는 어디에 도시 일치 옆에 일치 먼저 결과를 얻을 다른 모든 마지막 위치를 위해 도시와 우편 번호 없습니다 일치 거리에 따라. –

+0

흠, 왜 단일 쿼리에서 검색을 수행하지 말고 '필터링'대신 결과를 '순위 지정'하시겠습니까? – thaJeztah

+0

이 모델은 내 앱을 만들기 시작할 때 연관성과 메신저를 가지고 있기 때문에 수동으로 조인을 설정하고 싶지 않습니다. 내가 어떤 협회를 추가했는지 알지 못한다. beforeFind 모델에서 전체 쿼리 문자열을 가져와 작업없이 끝내는 방법이 있습니까? –