不稳定的MySQL st_distance_sphere结果

3
使用st_distance_sphere时,MySQL返回的结果似乎非常不稳定。
在用户表上运行此查询: (列表中距离点9.45公里以内的用户) select *, st_distance_sphere(`location`, ST_GeomFromText('point(-74.0104915 45.5576996)')) as distance from `users` having `distance` < 9450 返回正确的结果。
但是,在查询中减去1米: select *, st_distance_sphere(`location`, ST_GeomFromText('point(-74.0104915 45.5576996)')) as distance from `users` having `distance` < 9449 会给出这个SQL语法错误:#1210 - Incorrect arguments to st_distance_sphere 我还注意到添加一个limit语句会改变查询断开的位置,具体取决于限制数字。
有没有人遇到过这种类型的查询类似的问题?我很难弄清楚这里发生了什么。
我正在使用MySQL 5.7
谢谢!
编辑:进一步测试显示,该查询在小数据集(<〜2-3k行)上运行正常,但在更大的数据集上则出现错误。非常奇怪。

在你的示例中,不仅仅是移除了1米。这2个示例使用了不同的表格。members表格中是否有location列? - ItsPete
嗨,那个问题是错误的,实际上出错的地方在同一张表中。已经编辑好了,谢谢。 - Alexandre Lotte
1个回答

5

经过大量的测试,我终于找到了不稳定的起源:

一个用户在数据库中有一个 无效的纬度/经度坐标 (-100, 100),可能是通过phpMyAdmin进行了某些人为操作造成的。

纬度应该在-90.0到90.0之间, 而经度应该在-180.0到180.0之间。

当这个用户在我们搜索半径范围内时,查询就会崩溃。这就是为什么所有参数都会影响错误(限制语句、半径范围和中心点)。一旦用户输入结果,事情就变得无法控制了。

教训就是,保护好你的数据!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接