我提供服务,将附近的驾驶员位置给乘客。
这个查询有效吗?它实际上搜索附近的乘客位置半径吗?
我只是将纬度和经度设为一个数字。
你们可以向我核实或解释一下吗?
user
user.username
答案 0 :(得分:2)
你的SQL查询看起来像这样:
$stmt = $dbi->prepare("SELECT id, name, latitude, longitude,
(ACOS(COS(RADIANS(?)) * COS(RADIANS(b.latitude)) * COS(RADIANS(b.longitude) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(b.latitude)))) as distance
FROM driver
WHERE distance <= 10/6371.0");
$stmt->bind_param('sss', $latitude1,$longitude1,$latitude1);
<强>解释强>
在上面的查询中,我将驾驶员与乘客的距离计算为distance
,然后选择那些位于10公里范围内的驾驶员。
在distance <= 10/6371
语句中,使用6371
,因为它是以kms为单位的地球半径值。如果您想以英里计算距离,可以使用3956
代替6371
,因为3956
是地球半径(英里)。
有关这方面的更多信息可以在here找到
如果您还想检索乘客的详细信息,请使用不同的查询而不是加入,因为您必须拥有乘客的主键,因为他是请求驾驶员列表的人。
$stmt = $dbi->prepare("SELECT id, name, latitude, longitude,
6371 * (ACOS(COS(RADIANS(?)) * COS(RADIANS(b.latitude)) * COS(RADIANS(b.longitude) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(b.latitude)))) AS distance
FROM driver
HAVING distance <= 10
ORDER BY distance ASC");
$stmt->bind_param('sss', $latitude1,$longitude1,$latitude1);