1
我允許我的用戶選擇英里半徑數字和位置,然後我試圖獲取位於該半徑內的結果。有一羣在線教程,並有一個這似乎有完善的查詢將複雜查詢轉換爲cakephp分頁條件
'SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;'
但我使用CakePHP,我想使用分頁組件,所以我需要把這種查詢到條件陣列選擇所有標記和相關數據。誰能幫我嗎?我是cakephp的新手,在最好的時候絕對沒有用sql。
特別的HAVING位彆扭......
編輯
我現在使用此代碼
$this->Paginator->settings = array(
'fields'=>array('id','(3959 * acos(cos(radians(37)) * cos(radians('.$lat.')) * cos(radians('.$lng.') - radians(-122)) + sin(radians(37)) * sin(radians('.$lat.')))) AS distance '),
'limit' => 20,
'conditions'=>array('distance < '.$miles)
);
$data = $this->Paginator->paginate('Job');
$this->set(compact('data'));
並且至少正在運行的查詢,但我得到錯誤說
Unknown column 'distance' in 'where clause'
任何想法?
更多修改
的日誌中顯示
SELECT `Job`.`id`, (3959 * acos(cos(radians(37)) * cos(radians(54.59728500000001)) * cos(radians(-5.930119999999988) - radians(-122)) + sin(radians(37)) * sin(radians(54.59728500000001)))) AS distance FROM `trainnation`.`jobs` AS `Job` LEFT JOIN `trainnation`.`users` AS `User` ON (`Job`.`user_id` = `User`.`id`) LEFT JOIN `trainnation`.`courses` AS `Course` ON (`Job`.`course_id` = `Course`.`id`) WHERE 1 = 1 GROUP BY distance having distance < 49 LIMIT 20
看起來正確的,但它不是從DB現在拉任何東西。而且應該從這些選項中的至少9
是的 - 但我想使用分頁功能 - 這是一個很好的回退計劃,但我會通過分頁組件 –
喜歡檢查我編輯的答案 – Sadikhasan
嘿,看起來它應該工作,但返回所有我的標記。我使用的是cakephp2.3,你的代碼與我的代碼看起來略有不同,所以我將嘗試一些不同的代碼 –