加入什么

时间:2015-05-21 18:11:26

标签: sql mariadb

我有一张表,它将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

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 KEYUNIQUE 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