2013-04-04 95 views
0

我在尋找一些幫助查詢,我敢肯定的是簡單,但我看不到樹木,不見森林,我希望有人可以提供幫助。過濾MySQL查詢距離計算

我在尋找我的用戶數據庫,用戶計算並輸出結果之間的距離如下:

$result = queryMysql("SELECT user FROM $table WHERE x= 'y'"); 
$num = mysql_num_rows($result); 

for ($j = 0 ; $j < $num ; ++$j) 
    { 
    $row = mysql_fetch_row($result); 
    if ($row[0] == $user) continue; 

    $query = "SELECT * FROM $table WHERE user='$row[0]'"; 
    $res=mysql_query($query); 
    $results=mysql_fetch_assoc($res); 
    $userlocation=$results['location']; 
    //run distance function which outputs $distance 
    if($distance <= $maximumdistance) 
    { 
      //echo user info 
    } 

我想要做的是運行距離函數,確定誰返回作爲真正的用戶是什麼,並獲得他們的用戶ID(唯一),無論是在數組或其他東西,所以我可以計算結果,然後通過它們運行輸出。

這是否有意義和/或是否有更好的方法來做到這一點。

謝謝

+0

這是非常低效的。將整個數據庫拖入PHP中,然後讓PHP執行篩選是沒有意義的。這就是爲什麼你有一個數據庫開始。您應該學習如何執行連接的查詢並使用SQL'where'子句在數據庫中執行您想讓PHP執行的操作。 – 2013-04-04 21:45:46

+0

我不得不把他們拉出來,雖然能夠計算距離,我不能做任何其他方式,我可以看到 – user2246804 2013-04-04 21:47:13

+0

數據庫也可以做數學... – 2013-04-04 21:47:38

回答

0

當你說距離,你說的是地理距離嗎?運行距離計算的MySQL比PHP快得多。就我個人而言,這是我會做的。創建一個名爲user_distances與領域user_id1另一個表,user_id2,並距離。將user_id1和user_id2放在一起作爲主鍵。

現在,讓我們用我們的距離填充該表。我假設你已經擁有最可能基於城市/郵政編碼的用戶的經度和緯度(如果沒有,則可以獲得郵政編碼數據庫)。你會做這樣的事情:

INSERT INTO user_distances 
    (user_id1, user_id2, distance) 
SELECT 
    u1.user_id, 
    u2.user_id, 
    (69.172 * SQRT(POW(u1.latitude-u2.latitude, 2) + POW(u1.longitude-u2.longitude, 2))) as `distance` 
FROM 
    users as u1, 
    users as u2 
WHERE 
    u1.user_id != u2.user_id; 

現在,你可以得到很多更加精確與距離計算,這只是一個很簡單的例子,粗略估計在英里(先進的算法將採取的距離考慮到地球的形狀)。現在你有這個新的表user_distances填充每個用戶id對之間的距離,你可以運行簡單的查詢,如選擇在哪裏距離< 10.

我希望這可以幫助。我沒有測試SQL,但你應該明白了吧:)

0

嗯,只是在距離 latitude1快速說明 - Latitude2 * 69.whatever是罰款

但緯度和經度是不同樣

爲東經一個很好的猜測是* * 53

你離赤道越去越遠,就越這些工作(當然)

是,USCG認證隊長,所以我瞭解經度和緯度 - 我們不住在平坦的地球上.....