2012-10-07 2 views
0

나는 PHP로 MySQL에서 일하고있다. 각 우편 번호에 우편 번호와 위도/경도가 포함 된 한 테이블의 우편 번호에 대한 쿼리를 수행하고 있습니다. 두 번째 테이블에는 해당 우편 번호에 대한 우편 번호와 평균 수입이 들어 있습니다. 사용자가 우편 번호를 지정하면 (이 번호를 기본 우편 번호라고 부름) 우편 번호 15 마일 반경을 반환합니다. 웹 페이지를 통해 사용자는 PHP에서 MySQL을 위해 BETWEEN을 사용하는 다양한 소득을 쿼리 할 수 ​​있습니다.동일한 MySQL 출력에 BETWEEN 출력과 하나의 레코드를 포함하려면 어떻게해야합니까?

내 문제는 사용자가 선택한 범위에 따라 수입 범위를 벗어 났기 때문에 기본 우편 번호가 항상 나타나지 않을 수 있다는 것입니다. 이 경우 정렬 된 출력에 기본 우편 번호가 포함되어 있지 않으므로 사용자에게 혼란을줍니다. 소득 범위가 지정되지 않은 것처럼 기본 우편 번호를 포함 할 수 있기를 원합니다.

(BETWEEN을 사용하는) 원거리 데이터를 포함하고 기본 우편 번호 데이터를 포함하여 출력의 MySQL ORDERING을 여전히 활용할 수있는 방법은 무엇입니까? 감사!

UPDATE : 여기 당신은 내가 원하는대로, 그것은 90210을 반환하지 않습니다 볼 수 있듯이 우편 번호 90210에 대한 작업 쿼리는 사이가 소득 범위에 있지 않기 때문에 (평균 서울 = 연합 뉴스) 때문에 :

mysql> SELECT zip, city, state, avg_agi, (3959 * acos(cos(radians(34.088808)) * cos( radians(lat)) * cos(radians(lng) - radians(-118.40612)) + sin(radians(34.088808)) * sin(radians(lat)))) AS distance FROM zip_codes, avgagi where zip=zipcode and avg_agi BETWEEN 100000 and 200000 HAVING distance < 5 ORDER BY distance LIMIT 0 , 10000; 
+-------+----------------+-------+---------+------------------+ 
| zip | city   | state | avg_agi | distance   | 
+-------+----------------+-------+---------+------------------+ 
| 90069 | West Hollywood | CA | 121753 | 1.42816585190112 | 
| 90211 | Beverly Hills | CA | 164538 | 2.06804933097035 | 
| 90024 | Los Angeles | CA | 187134 | 2.47751318825072 | 
| 90025 | Los Angeles | CA | 130983 | 3.76591348160737 | 
| 91604 | Studio City | CA | 103328 | 3.8634176735557 | 
| 90064 | Los Angeles | CA | 130769 | 3.95933331921038 | 
| 90068 | Los Angeles | CA | 100370 | 4.52908379278674 | 
+-------+----------------+-------+---------+------------------+ 

답변

2

어디 OR (지퍼 = z) (x 및 y 사이의 데이터)

없이 작동 하는가?

+0

OR을 사용하여 쿼리를 수행하면 가장 오랜 시간 동안 회전하고 끝나지 않으므로이 작업을 잘못 수행해야합니다. OR 없이도 작동하는 쿼리가 있습니다. 우편 번호 90210에이 위치를 포함시킬 제안이 있습니까? mysql> SELECT zip, city, state, avg_agi, (3959 * acos (라디안 (34.088808)) * cos (라디안 (위도)) * cos (라디안 (lng) - 라디안 (-118.40612)) + sin (라디안 (위도)))) AS 거리 zip_codes, avgagi 여기서 zip = zipcode 및 avg_agi 100000 및 200000 HAVING 거리 <5 ORDER BY 거리 LIMIT 0, 10000; – Edward

관련 문제