看看这个查询
SELECT DISTINCT
TB.ID,
TB.Latitude,
TB.Longitude,
111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
`tablebusiness` AS TB
join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
MBRContains(
GeomFromText ('MULTIPOINT(-6.2317830813328 106.72621691867,-6.1382169186672 106.81978308133)'),
TA.Latlong
)
AND
MATCH (FullTextSearch) AGAINST ('kucing*' IN BOOLEAN MODE)
ORDER BY
Distance
LIMIT
0, 20
这基本上是搜索所有 TA.LatLong 在“MULTIPOINT(-6.2317830813328 106.72621691867,-6.1382169186672 106.81978308133)”框中的公司,之后该框必须包含 kucing
这将返回 22 行。
现在将其与此查询进行比较
SELECT DISTINCT
TB.ID,
TB.Latitude,
TB.Longitude,
111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
`tablebusiness` AS TB
join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
MBRContains(
GeomFromText ('MULTIPOINT(-6.2317830813328 106.72621691867,-6.1382169186672 106.81978308133)'),
TA.Latlong
)
ORDER BY
Distance
LIMIT
0, 20
这是相同的查询,但限制较少。现在我只想检查业务是否在框中。这就对了。是的,那些盒子里有企业。其中大部分不包含“kucing*”字样
应该有更多的查询。然而,更少。第二个查询返回 null。LESS 限制性查询返回 LESS 结果。
罗兰多一口气回答得很好。
带有 MATCH (FullTextSearch) AGAINST ('kucing*' IN BOOLEAN MODE) 的那个是可以正常工作的那个。
我在问为什么没有的那个是有问题的。罗兰多似乎试图纠正正确的。
注意:(我想知道这是否应该是另一个问题)。听别人说后我试过:删除不同的
SELECT
TB.ID,
111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
`tablebusiness` AS TB
join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
MBRContains(
GeomFromText (
'MULTIPOINT(-6.1939967464102 106.76400325359,-6.1760032535898 106.78199674641)'
),
TA.Latlong)
AND TA.Prominent >15
ORDER BY
Distance
LIMIT
0, 20
返回 0 行
然后我尝试删除订单和限制
SELECT
TB.ID,
111151.29341326*SQRT(pow(-6.185-TB.Latitude,2)+pow(106.773-TB.Longitude,2)*0.98839228980165) AS Distance
FROM
`tablebusiness` AS TB
join tableauxiliary as TA on TA.BusinessID=TB.ID
WHERE
MBRContains(
GeomFromText (
'MULTIPOINT(-6.1939967464102 106.76400325359,-6.1760032535898 106.78199674641)'
),
TA.Latlong)
AND TA.Prominent >15
这也导致 0 行最后我使用原始查询并确保我只删除
AND
MATCH (FullTextSearch) AGAINST ('kucing*' IN BOOLEAN MODE)
将结果从一些结果变成没有结果
最后我使查询变得非常简单
SELECT BusinessID, Prominent
FROM
tableauxiliary as TA
WHERE
MBRContains(GeomFromText ('MULTIPOINT(-6.2209869856406 106.73701301436,-6.1490130143594 106.80898698564)'),TA.Latlong)
这就是有史以来最基本的查询。
仍然没有返回结果
现在这是一个奇迹。我添加了 2 个字符,它再次起作用。我添加的字符是=1
SELECT BusinessID
FROM tableauxiliary AS TA
WHERE MBRContains( GeomFromText( 'MULTIPOINT(-6.2209869856406 106.73701301436,-6.1490130143594 106.80898698564)' ) , TA.Latlong )
=1
我得到了结果
我想是时候报告错误了。
FULLTEXT 索引对于 MySQL 查询优化器来说非常有趣。我之前写过:
尝试重构您的第一个查询,以便 FULLTEXT 子句和 Spatial 子句不会在 EXPLAiN 计划的同一级别执行。
如果第二个(确实限制较少)查询返回零行,而第一个查询返回多于零行,那么这是一个错误。
首先检查是否可以只用表重现错误。如果在您删除
DISTINCT
和/或ORDER BY ... LIMIT
.然后尝试编写重现错误的语句集(
CREATE
表、INSERT
行和 2 个查询,尽可能简化),以便其他人可以测试。然后就可以提交给MySQL了。