2015-10-19 68 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