Mysql 帮你解决问题不要麻烦做两次PK。你的建议是正确的,即使不是100%充分,但你让我找到了解决问题的正确方法,这就是为什么我给了你一个当之无愧的+1。问题是我真的不需要距离,只需要知道距离是否在一定水平以上。因此,我在下面的回答中修改了查询。你的建议是正确的,
Mysql 帮你解决问题不要麻烦做两次PK。你的建议是正确的,即使不是100%充分,但你让我找到了解决问题的正确方法,这就是为什么我给了你一个当之无愧的+1。问题是我真的不需要距离,只需要知道距离是否在一定水平以上。因此,我在下面的回答中修改了查询。你的建议是正确的,,mysql,indexing,latitude-longitude,query-performance,Mysql,Indexing,Latitude Longitude,Query Performance,帮你解决问题不要麻烦做两次PK。你的建议是正确的,即使不是100%充分,但你让我找到了解决问题的正确方法,这就是为什么我给了你一个当之无愧的+1。问题是我真的不需要距离,只需要知道距离是否在一定水平以上。因此,我在下面的回答中修改了查询。你的建议是正确的,即使不是100%充分,但你让我找到了解决问题的正确方法,这就是为什么我给了你一个当之无愧的+1。问题是我真的不需要距离,只需要知道距离是否在一定水平以上。因此,我在下面的回答中修改了查询。祝贺你!你在的链接真的关注我的问题!事实上,我的解决方案
帮你解决问题不要麻烦做两次PK。你的建议是正确的,即使不是100%充分,但你让我找到了解决问题的正确方法,这就是为什么我给了你一个当之无愧的+1。问题是我真的不需要距离,只需要知道距离是否在一定水平以上。因此,我在下面的回答中修改了查询。你的建议是正确的,即使不是100%充分,但你让我找到了解决问题的正确方法,这就是为什么我给了你一个当之无愧的+1。问题是我真的不需要距离,只需要知道距离是否在一定水平以上。因此,我在下面的回答中修改了查询。祝贺你!你在的链接真的关注我的问题!事实上,我的解决方案(在您的建议之前开发)与实现“边界框”的方向相同,但没有分区。真的很有用,做得很好的网页!非常感谢!祝贺你在的链接真的关注我的问题!事实上,我的解决方案(在您的建议之前开发)与实现“边界框”的方向相同,但没有分区。真的很有用,做得很好的网页!非常感谢!又名“包围盒”。需要一个纬度的余弦来解释比纬度更近的经线。又名“边界框”。需要一个纬度的余弦来说明经线比纬度更接近。
CREATE TABLE `data_addresses` (
`ID` int(11) NOT NULL COMMENT 'Primary Key',
`LAT` int(11) NOT NULL COMMENT 'Latitude x 10000',
`LNG` int(11) NOT NULL COMMENT 'Longitude x 10000',
`ADDRESS` varchar(128) NOT NULL COMMENT 'Reverse Geocoded Street Address'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `data_addresses`
ADD PRIMARY KEY (`ID`),
ADD UNIQUE KEY `IDX_ADDRESS_UNIQUE_LATLNG` (`LAT`,`LNG`),
ADD KEY `IDX_ADDRESS_LAT` (`LAT`),
ADD KEY `IDX_ADDRESS_LNG` (`LNG`);
ALTER TABLE `data_addresses`
MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key';
SELECT `id`, ROUND(SQRT(POW(ABS(`LAT`-ROUND(MyLat*10000)),2)+POW(ABS(`LNG`-ROUND(MyLon*10000)),2))) AS R FROM splc_smarttrk.`data_addresses` ORDER BY R ASC LIMIT 1
SELECT
id
, ROUND(SQRT(POW(ABS(`LAT`-ROUND([LAT]*10000)),2)+POW(ABS(`LNG`- ROUND([LNG]*10000)),2))) AS R
FROM (
SELECT
LAT
FROM
data_addresses
WHERE
LAT <= [LAT]
ORDER BY
LAT DESC
LIMIT 100
UNION ALL
SELECT
LAT
FROM
data_addresses
WHERE
LAT >= [LAT]
ORDER BY
LAT ASC
LIMIT 100
SELECT
LNG
FROM
data_addresses
WHERE
LNG <= [LNG]
ORDER BY
LNG DESC
LIMIT 100
UNION ALL
SELECT
LNG
FROM
data_addresses
WHERE
LNG >= [LNG]
ORDER BY
LNG ASC
LIMIT 100
)
AS data_addresses_range
ORDER BY
R ASC
LIMIT 1
SELECT `id` AS ID,
ROUND(SQRT(POW(ABS(`LAT`-ROUND(NLat*10000)), 2) +
POW(ABS(`LNG`-ROUND(NLon*10000)), 2))
) AS RT INTO ADDR_ID, RATING
FROM splc_smarttrk.`data_addresses`
WHERE (`LAT` BETWEEN (ROUND(NLat*10000)-R) AND (ROUND(NLat*10000)+R))
AND (`LNG` BETWEEN (ROUND(NLon*10000)-R) AND (ROUND(NLon*10000)+R))
ORDER BY RT ASC
LIMIT 1;