2012-10-07 43 views
0

我正在用PHP工作MySQL。我正在查詢一個包含郵政編碼和每個郵政編碼經緯度的表格的郵政編碼。第二張表包含該郵政編碼的郵政編碼和平均收入。用戶給出一個郵政編碼(我們稱之爲基本郵政編碼),並返回一個15英里半徑的郵政編碼。通過網頁,用戶可以查詢一系列在PHP中使用BETWEEN for MySQL的收入。如何在同一個MySQL輸出中包含一個BETWEEN輸出和一個異常記錄?

我的問題是,根據用戶選擇的範圍,他們的基本郵政編碼可能不會一直出現,因爲它不在收入範圍內。發生這種情況時,用戶會感到困惑,因爲排序後的輸出不包含其基本郵政編碼。我希望能夠包含基本郵政編碼,就好像沒有指定收入範圍一樣。

如何包含範圍內的數據(使用BETWEEN)幷包含基本郵政編碼的數據,以便它仍然利用MySQL的ORDERing輸出。謝謝!

更新:這裏是郵政編碼90210工作查詢正如你所看到的,它不會返回90210如我所願,因爲BETWEEN,因爲它不是在收入範圍內(平均AGI):

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

WHERE OR(郵編= Z)(x和y之間的數據)

應工作沒有?

+0

我一定在做這個錯誤,因爲當我使用類似的OR進行查詢時,它旋轉了最長的時間並且從未完成。這是一個沒有OR的查詢。您是否有建議將郵政編碼90210包括在內? (弧度(34.088808))* cos(弧度(lat))* cos(弧度(lng) - 弧度(-118.40612))+ sin(弧度(弧度) (34.088808))* sin(弧度(lat))))AS距離距離zip_codes,avgagi其中zip = zipcode和avg_agi BETWEEN 100000和200000 HAVING距離<5 ORDER BY distance LIMIT 0,10000; – Edward

相關問題