我有一张表,它将id与纬度和经度相关联。
对于该表中的每个id,我正在尝试查找最近的id,并将它们存储在另一个带有旅行时间的表中,如果路线尚未存在或者旅行时间较短(如果存在,则存在路线)是transfers
)
我目前正在使用:
6371 * SQRT(POW( RADIANS(stop_lon - %lon) * COS(RADIANS(stop_lat + %lat)/2), 2) + POW(RADIANS(stop_lat - %lat), 2)) AS distance
找到这个距离。
它确实很好用,但是我不知道要加入什么(对于自我加入)。
我该怎么办?
这里有'SHOW CREATE TABLE'用于不同的表格,这里有用:
CREATE TABLE `stops` (
`stop_id` int(10) NOT NULL,
`stop_name` varchar(100) NOT NULL,
`stop_desc` text,
`stop_lat` decimal(20,16) DEFAULT NULL,
`stop_lon` decimal(20,16) DEFAULT NULL,
PRIMARY KEY (`stop_id`),
FULLTEXT KEY `stop_name` (`stop_name`),
FULLTEXT KEY `stop_desc` (`stop_desc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1
CREATE TABLE `transfers` (
`transfer_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`from_stop_id` int(10) NOT NULL,
`to_stop_id` int(10) NOT NULL,
`transfer_time` int(10) NOT NULL,
PRIMARY KEY (`transfer_id`),
UNIQUE KEY `transfer_id` (`transfer_id`),
KEY `to_stop_id` (`to_stop_id`),
KEY `from_stop_id` (`from_stop_id`)
) ENGINE=InnoDB AUTO_INCREMENT=81810 DEFAULT CHARSET=utf8 PAGE_CHECKSUM=1
答案 0 :(得分:0)
也许:
FROM transfers AS a
JOIN transfers AS b ON b.from_stop_id = to_stop_id
还有第三张桌子吗?它与现有的两者并不相同?让我看看我是否有合适的型号:stops
就像机场一样。 transfers
就像在机场等候下一站航班一样。但是transfers
没有自己的stop_id
;这令人困惑。而third_table
将是停靠点之间的飞行时间/距离?
或许transfer
只是从一个机场到另一个机场的航班?在等待下一站时没有延迟?
其他说明:
PRIMARY KEY (`transfer_id`),
UNIQUE KEY `transfer_id` (`transfer_id`),
由于PRIMARY KEY
是UNIQUE KEY
,后者是多余的(浪费); DROP
它。
decimal(20,16)
有点矫枉过正。
Datatype Bytes resolution
------------------ ----- --------------------------------
DECIMAL(6,4)/(7,4) 7 16 m 52 ft Houses/Businesses
DECIMAL(8,6)/(9,6) 9 16cm 1/2 ft Friends in a mall
DECIMAL(20,16) 20 microscopic