MySQL:不能使用WHERE子句返回POINT类型

时间:2015-07-02 12:21:43

标签: php mysql geospatial spatial mysql-spatial

我有一些点存储在MySQL数据库中,它们存储为具有x和y值的POINT类型。我试图使用WHERE子句中的x和y值搜索并返回特定点。

以下是我正在尝试的查询示例:

"SELECT id, x(coords) AS lng, y(coords) AS lat
 FROM my_points
 WHERE x(coords) = $lng AND y(coords) = $lat"

但这不起作用。我没有MySQL空间类型的经验,任何帮助将不胜感激!

下面的评论提供了更多信息:

我应该已经提到过我实际上使用PHP框架ORM进行数据库查询,上面提到的SQL只是假设代表我试图使用ORM的语法实现的。我不认为问题出在ORM上,尽管我已经在' WHERE'中使用了其他功能。之前的条款。我不太确定它是否正确使用' x()= lng和y()= lat'在' WHERE'条款。使用正常的正确SQL语法,您在WHERE子句中使用x()AND y()给我提供了我正在寻找的内容?

1 个答案:

答案 0 :(得分:0)

如果你的列名中确实有括号,你需要勾选它们:

SELECT `id`, `x(coords)` AS `lng`, `y(coords)` AS `lat`
FROM `my_points`
WHERE `x(coords)` = $lng AND `y(coords)` = $lat

所有未引用的列和表名称可以包含服务器默认字符集中的任何字母数字字符,以及字符“_”和“$”。名称可以从名称中合法的任何字符开始,包括数字。

列和表名称应在后面的刻度中,允许使用反引号,ASCII 0和ASCII 255之外的任何字符。当名称包含特殊字符或是保留字时,这很有用。

对于数据库和表名,还有两个额外限制,即使您返回勾选它们也是如此。首先,你不能使用'。' character,因为它是database_name.table_name和database_name.table_name.col_name表示法中的分隔符。其次,您不能使用UNIX或Windows路径名分隔符('/'或'\')。