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
我的公式来自:
我有一个 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
我的公式来自: