2013-04-04 3 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 전체 데이터베이스를 yanking 할 필요가 없으며 PHP로 필터링을 수행해야합니다. 그래서 데이터베이스를 시작해야합니다. 조인 된 쿼리를 수행하는 방법과 SQL에서'where' 절을 사용하여 데이터베이스에서 PHP가 수행하려는 작업을 수행하는 방법을 배워야합니다. –

+0

거리를 계산할 수 있도록 그들을 빼내야 만합니다. 다른 방법으로 볼 수는 없습니다. – user2246804

+0

데이터베이스도 수학을 할 수 있습니다. –

답변

0

? MySQL은 거리 계산을 PHP보다 훨씬 빠르게 수행합니다. 개인적으로, 내가 할 일은 다음과 같습니다. , user_id2거리을 필드 user_id1user_distances라는 다른 테이블을 만듭니다. 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; 

을,이 약 마일의 거리를 (고급 알고리즘에 소요되는 추정 그냥 아주 간단한 예이다 지구의 모양을 고려하여). 이제 각 사용자 ID 쌍 사이의 거리로 채워진이 새로운 테이블 user_distances를 가지고 다음과 같은 간단한 쿼리를 실행할 수 있습니다. 거리를 선택하십시오. < 10.

이 정보가 도움이되기를 바랍니다. 나는 SQL을 테스트하지 못했지만, 당신이 지점 :

0

음, 거리 latitude1에 그냥 빨리 메모를 얻어야한다 - Latitude2 *이 69.whatever는

잘하지만 위도와 경도는 아니된다 경도

같은 좋은 생각은 * *이다 (물론) 53 추가로 적도에서 이동

, 덜이 작업

예, USCG 선장 인증, 그래서 나는을 경도와 위도를 이해합니다 - 우리는 평평한 땅에 살지 않습니다 .....

관련 문제