我使用cakephp 2.3並試圖分頁查詢檢索所有我的'工作'在一定的英里半徑範圍內。幸運的是,我發現我認爲我需要的查詢,但是我有問題想要獲取正確的數據。cakephp - 如何構造這個查詢
編輯 所以每個「工作」,記錄有一個緯度和經度字段,另一個用戶通過在搜索表單中輸入自己的經緯度和lng值以及一英里範圍內的搜索。在下面的代碼中,我的paginator中的php變量$ lat $ lng和$ miles是用戶輸入的搜索參數。
查詢,我發現這裏https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=el-GR - 應該是這樣的:
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;
,我已經得到了通過我的PAGINATE會像這樣:
$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,
'group'=>'distance having distance < '.$miles
);
$jobs = $this->Paginator->paginate('Job');
,併產生看起來SQL像:
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 < 100 LIMIT 20
這看起來是正確的,但沒有拉任何信息。應該至少有9條記錄在距離該位置100英里的範圍內,但$工作總是空的。
任何人都可以發現我做錯了什麼嗎?
您是否嘗試過直接從您的MySQL工作臺或PhpMyAdmin或cli運行創建的查詢?如果是這樣,它說什麼? – Jelmer