Преобразование функции расстояния SQL в дружественный к торту запрос с использованием ORM - PullRequest
0 голосов
/ 13 октября 2011

Я пытаюсь преобразовать строку ниже SQL в запрос поиска 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

1 Ответ

1 голос
/ 14 октября 2011

У меня есть фрагмент кода, выполняющий что-то похожее:

$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 просто поместите расчет расстояния в виртуальное поле и выполните поиск по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...