MYSQL:在地理空间查询中将VARCHAR字段用作POINT

时间:2018-07-12 08:46:23

标签: php mysql laravel doctrine-orm

我决定检测两点之间的距离。点之一是静态-35.735019 51.410041,但是另一点是由数据库字段给出的点。

这是我的代码:

SELECT
  r0_.restaurant_point AS restaurant_point_0,
  ST_Distance(GeomFromText('POINT(35.735019 51.410041)'), GeomFromText('POINT(r0_.restaurant_point)')) *
  100 AS sclr_1
FROM restaurants r0_

我们将r0.restaurant_point存储为VARCHAR。以下面的字符串为例:35.73062161548168 51.410930156707764

尽管如果我将r0.restaurant_point更改为静态值也可以使用,但是无法使用数据库字段进行度量。

反正有没有绑定此值的方法或另一种解决方法?

1 个答案:

答案 0 :(得分:2)

要连接表示该点的字符串中的列restaurant_point的值,可以使用CONCAT()

GeomFromText(CONCAT('POINT(', t.restaurant_point, ')'))

在您的情况下,您只是尝试从列中的坐标创建一个非点,而从列名本身创建一个Point。您需要按以下步骤更改代码:

SELECT
r0_.restaurant_point AS restaurant_point_0,
ST_Distance(
  GeomFromText('POINT(35.735019 51.410041)'), 
  GeomFromText(CONCAT('POINT(', r0_.restaurant_point, ')'))
) * 100 AS sclr_1
FROM restaurants r0_