PHP MySQL 如何计算行与行之间的距离?

PHP MySQL How to calculate distance for between row?

我有一个 table 这样的:

stepID   | UserID| Date        | Lat        | Lng
1        |1      | 2019-10-11  | -7.2905838 | 112.5655568
2        |1      | 2019-10-11  | -7.2349607 | 112.6106177
3        |1      | 2019-10-11  | -7.2345435 | 112.6112432
4        |1      | 2019-10-12  | -7.2529265 | 112.6542999

我需要计算用户在同一天访问过的距离(例如2019-10-11)。所以在 PHP 页面上显示的内容是(下面的 KM 量是一个例子):

From step 1 to 2: 2 KM
From step 2 to 3: 3 KM
From step 3 to 4: 3 KM
TOTAL FOR TODAY: 8 KM

我用谷歌搜索并搜索了这个 Whosebug 的历史记录,但没有找到像我今天所面对的那样。需要你的建议如何查询这个。 之前谢谢你,GBU 总是。

这不是 MySQL 的最佳任务。通过从 DB 1 逐 1 读取行,以任何编程语言执行它会好得多。 但是,如果您想完全使用 MySQL 那么类似的东西(假设 StepIDs 是没有间隙的序列号):

SELECT UserID, SUM(km) total
FROM (
  SELECT t1.UserID, 
    DEGREES(ACOS(LEAST(1.0, COS(RADIANS(t1.Lat))
         * COS(RADIANS(t2.Lat))
         * COS(RADIANS(t1.Lon- t2.Lon))
         + SIN(RADIANS(t1.Lat))
         * SIN(RADIANS(t2.Lat))))) km
  FROM table t1
  JOIN table t2 ON t1.UserID = t2.UserID and t1.StepID = t2.StepID - 1
) t
GROUP BY UserID

我的公式来自: