मैं नीचे एसक्यूएल स्ट्रिंग को केक खोज क्वेरी में बदलने की कोशिश कर रहा हूं। क्या ऐसा करने का कोई आसान तरीका है?

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
Passionate Engineer 13 अक्टूबर 2011, 00:55
क्या कोई कारण है कि इसे find() क्वेरी में क्यों होना चाहिए? आप इसे वैसे ही छोड़ सकते हैं और इसके बजाय query() का उपयोग कर सकते हैं।
 – 
Brian Glaz
13 अक्टूबर 2011, 04:45
आपको इसे सबक्वायरी का उपयोग करके करना है, या अपनी क्वेरी को HAVING क्लॉज (दूरी के लिए) के लिए बदलना है और फिर आप इसे सामान्य खोज की तरह और भी आसान कर सकते हैं ....
 – 
api55
13 अक्टूबर 2011, 17:02

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 बस आपकी दूरी की गणना को एक आभासी क्षेत्र में भर देता है और उस पर खोज करता है।

1
Ben Graham 14 अक्टूबर 2011, 10:00