Php 复杂子计算的MySQL语法

Php 复杂子计算的MySQL语法,php,mysql,select,syntax,proc,Php,Mysql,Select,Syntax,Proc,使用下面的select,我试图在PHP循环遍历每一行时查看每一行,拉取当前位置半径,并使用PROC distance_between计算出从每个“事件”到当前位置的距离,然后在移动到下一行之前填充DISTANCEFROMEVENT 在这里,我摔倒了,因为大部分作品都是添加动作 distance_between 52.5960 , -1.9110 , GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE , GOFL_LOCCGRP_TPEGILOC

使用下面的select,我试图在PHP循环遍历每一行时查看每一行,拉取当前位置半径,并使用PROC distance_between计算出从每个“事件”到当前位置的距离,然后在移动到下一行之前填充DISTANCEFROMEVENT

在这里,我摔倒了,因为大部分作品都是添加动作

distance_between 52.5960 , -1.9110 ,
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ,
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE AS DISTANCEFROMEVENT
我不清楚如何将它连接到SELECT语句的语法,尽管我知道它本身应该可以工作

SELECT * FROM Current
    WHERE (GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE <53.319589001447
    AND
    GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE > 51.872410998553
    AND
    GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE > -2.6349916029658
    AND
    GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE < -1.1870083970342
    AND
    VALIDPERIOD_STARTOFPERIOD < '12-05-06 16:15:31'
    AND
    VALIDPERIOD_ENDOFPERIOD > '12-05-06 16:15:31' ,
    distance_between 52.5960 , -1.9110 , GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE , GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE AS DISTANCEFROMEVENT )
工作

SELECT *, ( 3959 * acos( cos( radians(52.5960) ) * cos( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ) ) * cos( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE ) - radians(-1.9110) ) + sin( radians(52.5960) ) * sin( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ) ) ) ) AS DISTANCEFROMEVENT FROM Current HAVING DISTANCEFROMEVENT < 50 ORDER BY DISTANCEFROMEVENT

在给您带来麻烦的部分之前,您的最后一个搜索词缺少“结束语”。除非这只是一个打字错误。如果不是这样,请告诉我,我再看一眼

编辑:


好的,那么您需要调用SELECT中的DISTANCEFROMEVENT字段来启动它

是的-我认为这是一个复制/粘贴错误,因为我一直在尝试不同的方法来做这件事-现在应该是正确的。如果你感兴趣的话,我也加入了PHP。好吧,我现在是在我的电脑上,而不是在我的手机上。我不认为“distance_between”是任何类型的MySQL命令,它直接出现在WHERE子句中,没有真正意义。您只是在php中尝试这个吗?或者您可以通过命令行或工作台直接与MySQL接口以获取错误号吗?或者直接在php中使用mysql\u query$connect、$sql或diemsql\u errno$connect.:。mysql_错误$connect;Hi-在上面的PROC之间添加了距离_。WHERE请求在调用sql之前确定的区域内的任何数据项。当大多数人在SQL代码中使用Haversine公式进行此操作时,我选择了一个直线框,因为它很快,数据将显示在屏幕上。所有这些都是有效的,因为我一直在其他地方使用它。。。。事实上,我用php在大约5分钟内完成了这项工作。。。。。我要说的是,将in中的distance_添加为一个子动作,这样我就可以动态计算出每行距中心位置的距离。当前用户位置是$lation$longitude,您可以在SQL查询中看到它是lat long。另外,像GOFL_LOCCGRP_TPEGILOC_TO_pointcoordinations_LATITUDE这样的键是我自己在数据库中的自定义列。。。。我提出的最后一个解决方案是工作,只是需要做一些调整。非常感谢Brendon和Scarcrow。您希望在SQL查询中执行此操作的原因是什么?看起来您可以获取数据,用PHP处理它,然后继续。嗨,我正在尝试生成最后一组SQL数据,以呈现给我拥有的JSONP特性。在xml版本中,我只是在每行迭代时运行计算,然后在创建文本时准备就绪时显示它们。由于JSONP调用获取了我在一个SQL查询中执行所有处理所需的SQL结果……您不能进行计算并将结果存储在传递给JSONP调用的字符串/数组/对象中吗?当您这么说时,是指我的距离结果还是指SQL+距离结果?由于我仍在摸索,所以我尽量不让事情过于复杂,因此只考虑SQL方面,因为JSONP在我其余的代码中是一致的。SQL+距离结果。您可以在不使用距离的情况下执行SQL,在php中执行距离计算,然后使用该距离修改结果行,最后将修改后的结果集传递给JSONP函数。
SELECT *, ( 3959 * acos( cos( radians(52.5960) ) * cos( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ) ) * cos( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE ) - radians(-1.9110) ) + sin( radians(52.5960) ) * sin( radians( GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE ) ) ) ) AS DISTANCEFROMEVENT FROM Current HAVING DISTANCEFROMEVENT < 50 ORDER BY DISTANCEFROMEVENT
SELECT *, (distance_between 52.5960 , -1.9110 , 
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE , GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE) AS DISTANCEFROMEVENT 
FROM Current WHERE
GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE < 53.319589001447
AND GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LATITUDE > 51.872410998553
AND GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE > -2.6349916029658
AND GOFL_LOCCGRP_TPEGILOC_TO_POINTCOORDINATES_LONGITUDE < -1.1870083970342
AND VALIDPERIOD_STARTOFPERIOD < '12-05-06 16:15:31'
AND VALIDPERIOD_ENDOFPERIOD > '12-05-06 16:15:31'