0

我有一些点存储在 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 进行 DB 查询,我上面编写的 SQL 只是假设代表我试图使用 ORM 的语法来实现的目标。我不认为问题出在 ORM 上,因为我之前在“WHERE”子句中使用过其他函数。我只是不太确定在“WHERE”子句中使用“x() = lng AND y() = lat”是否正确。使用正常的正确 SQL 语法,您在 WHERE 子句中使用 x() AND y() 给了我想要的东西?

4

1 回答 1

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 之外的任何字符。当名称包含特殊字符或为保留字时,这很有用。

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

于 2015-07-02T12:36:46.193 回答