2015-10-19 63 views
0

我有一個分散在世界各地的電臺表格。它看起來是這樣的:MySql:設計附近電臺的表格

+--------+------------+-------+-----------+ 
| ID | NAME | LAT | LON | 
+--------+------------+-------+-----------+ 
| 104326 | BERWINDALE | 40.8 | -78.6  | 
| 104406 | GRAMPIAN | 40.9 | -78.7  | 
| 121788 | COALPORT | 40.75 | -78.53333 | 
+--------+------------+-------+-----------+ 

對於每個站小號我的表,我有ID,LAT,LON描述站被認爲是就近小號的列表。對於紐約的一個電臺來說,附近電臺的列表會很大,至少有50個電臺長。但是對於廷巴克圖的一個電臺,附近電臺的列表可能只包含1或2個元素,或者是空的。

考慮到我不知道有多少鄰居與某個電臺相關聯,我該如何設計這個「鄰居臺表」?我聽說過標準化之類的事情,但作爲MySql noob,我需要一些詳細的演練。

+1

爲什麼你首先需要一個單獨的表? –

+0

我想不出有什麼辦法可以做到。 – nonremovable

+2

你不會爲此創建一個表。您可以創建一個所有電臺的表格,然後編寫一個查詢來爲給定電臺選擇最近的n個電臺,或查詢在y英里內尋找最近的電臺。 –

回答

0

要標準化數據,使您的電臺錶店站僅

+--------+------------+-------+-----------+ 
| ID | NAME | LAT | LON | 
+--------+------------+-------+-----------+ 
| 104326 | BERWINDALE | 40.8 | -78.6  | 
| 104406 | GRAMPIAN | 40.9 | -78.7  | 
| 121788 | COALPORT | 40.75 | -78.53333 | 
+--------+------------+-------+-----------+ 

所以這個表你就可以創建具有每站每個鄰居的行中的映射表。

+--------+----------------+-----------------+ 
| ID | STATION_ID | NEIGHBOR_ID | 
+--------+----------------+-----------------+ 
| 1 |  104326  |  104406  | 
| 2 |  104326  |  121788  | 
+--------+----------------+-----------------+ 

在這個簡單的例子是想說GRAMPIAN和科爾波特是BERWINDALE

的鄰居拉出來的鄰居,你可以做這樣的事情。

SELECT s.name as central_station, n.name as neighboring_stations 
FROM stations s 
JOIN neighbors n ON n.neighbor_id = s.id 
WHERE n.station_id = 104326