2011-10-12 2 views
0

SQL 문자열을 Cake 찾기 쿼리로 변환하려고합니다. 쉬운 방법이 있나요?거리 SQL 함수를 ORM을 사용하여 Cake 친숙한 쿼리로 변환

SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, distance 
       FROM 
       (SELECT longitude, latitude, firstname, surname, profile_pic, facebook_id, 6371 * ACos(Cos(RADIANS(users.latitude)) * Cos(RADIANS($latitude)) * Cos(RADIANS($longitude) - RADIANS(users.longitude)) + Sin(RADIANS(users.latitude)) * Sin(RADIANS($latitude))) AS distance 
       FROM users 
      ) as users 
       WHERE distance <=2 AND facebook_id != $facebook 
       ORDER BY distance 
       LIMIT 20 
+0

'find()'쿼리에 있어야하는 이유가 있습니까? 있는 그대로 그대로두고 대신'query()'를 사용할 수 있습니다. –

+0

하위 쿼리를 사용하여이 작업을 수행하거나 거리에 대한 HAVING cluase를 포함하도록 쿼리를 변경 한 다음 일반 검색과 마찬가지로 더 쉽게 작업을 수행 할 수 있습니다. – api55

답변

1

나는 비슷한 일을 코드를 가지고 :

$GeoCache->virtualFields = array(
    'distance' => "SQRT(POW(UserGeolocationCache.latitude - {$latitude},2) + POW(UserGeolocationCache.longitude - {$longitude},2))" 
); 
$users = $GeoCache->find('all', array(
    'conditions' => array('distance <' => '0.05'), 
    'order' => array('distance asc'), 
    'contain' => array('User'), 
)); 

TL을, DR은 가상 필드에 거리 계산 물건과 검색하십시오.

관련 문제