我在这里使用答案来设置我的查询:
https://stackoverflow.com/a/1006668/211457
我正在运行这个查询:
SELECT *
FROM users
WHERE MBRContains(LineFromText(CONCAT(
'(' , 39.76784253493 + 10 / ( 111.1 / cos(RADIANS(39.76784253493)))
, ' '
, -75.871009379625 + 10 / 111.1
, ','
, 39.76784253493 - 10 / ( 111.1 / cos(RADIANS(-75.871009379625)))
, ' '
, -75.871009379625 - 10 / 111.1
, ')' ))
,location)
我的数据库有这些条目:
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`location` point NOT NULL,
PRIMARY KEY (`id`),
SPATIAL KEY `sx_place_location` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `users` (`id`, `location`)
VALUES
(1,X'000000000101000000E17A14AE47E1434088855AD3BCF752C0'),
(2,X'000000000101000000E9FF1F9EBEF752C0440008AA48E24340');
当我希望返回第二行时,没有返回任何结果,因为这是我在查询中使用的值。我检查的一件事是我是否切换了经度和纬度的值,但在这两种情况下都没有返回任何内容。当我对查询运行解释时,它说“在阅读 const 表后注意到不可能的 WHERE”。我正在使用 MySQL 5.1.39。
由于导出是某种编码或某种形式,因此这里是一个屏幕截图。忽略多余的列。
编辑:我最终切换到 Postgresql。类似的查询更短并且有效。