2014-03-05 49 views
0

我有這個查詢,我想添加一個時間搜索。Php MySql查詢的距離和時間

這裏是我的工作查詢:

$query = "SELECT *,(((acos(sin((".$lat."*pi()/180)) * sin((Lat*pi()/180)) + 
cos((".$lat."*pi()/180)) * cos((Lat*pi()/180)) * cos(((".$lon."- Lon) * 
pi()/180))))*180/pi())*60*1.1515) as distance 
FROM items 
HAVING distance < ".$distance." 
ORDER BY distance 
LIMIT ".$min." , ".$max.""; 

我想補充像這樣

WHERE timestamp > ".$somePastDate." 

對於小時了我已經試過我能想到的,沒有運氣的所有組合。我敢打賭它也很簡單,我會搖頭。提前致謝。

+0

所以有什麼問題? 'WHERE now()>'2014-01-01''工作正常... –

+0

哦,對不起,時間戳是我自己命名和更新自己的列,而不是由mysql自動更新 – Jptalon

+0

如果它是msyql日期/日期時間字段,那麼只是它的名字而不是'now()'。 –

回答

0

我建議你使用這個嵌套查詢,如下

SELECT *, big_cosine_law_distance_formula AS distance 
    FROM (
    SELECT * 
     FROM items 
     WHERE items.timestamp > ".$somePastDate." 
    ) AS i 
HAVING distance < ".$distance." 

內查詢將通過時間縮小您的項目,所以你不必磨出來的大距離公式對他們所有。

您也可以考慮使用更快的基於邊界框的搜索來按空間縮小您的項目,如此處所述。 http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/

您可以通過從內部查詢開始來排除這類事情的故障。

 SELECT * 
     FROM items 
     WHERE items.timestamp > ".$somePastDate." 

當您從該查詢獲得可靠結果時,添加外部結果。

+0

謝謝,我喜歡不爲每個人做計算的想法。試圖讓它現在工作,但沒有項目仍然 – Jptalon

+0

看到我的編輯有關故障排除 –

+0

是的,我只是這樣做,我必須有我的時間變量的問題,即使它正確回聲。基本上我想永遠不會顯示和超過31天的項目,所以它總是從目前的31天。 – Jptalon