根据haversine距离公式选择不同的列值?

Posted

技术标签:

【中文标题】根据haversine距离公式选择不同的列值?【英文标题】:Select distinct column value based on haversine distance formula? 【发布时间】:2020-04-11 23:35:06 【问题描述】:

我正在尝试根据与用户的距离查询所有不同的category column values。到目前为止,它只是根据距离而不是反向输出所有列值。我想以某种方式查询DISTINCT category WHERE distance < ?,但我得到一个错误,说它是一个未知的列。这是我的尝试:

$sql="SELECT DISTINCT category,
( 3959 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS distance
FROM tasks
WHERE status='o' 
HAVING distance < ?";

$stmt = $conn->prepare($sql);
$stmt->bind_param('ssss', $_POST['lat'],$_POST['lng'],$_POST['lat'],$_POST['distance']);
$stmt->execute();
$stmt->bind_result($category,$distance);
    while($stmt->fetch())

【问题讨论】:

【参考方案1】:

使用GROUP BY 它的行为就像不同的

$sql="SELECT category,
( 3959 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS distance
FROM tasks
WHERE status='o'
GROUP BY category 
HAVING distance < ?";

$stmt = $conn->prepare($sql);
$stmt->bind_param('ssss', $_POST['lat'],$_POST['lng'],$_POST['lat'],$_POST['distance']);
$stmt->execute();
$stmt->bind_result($category,$distance);
    while($stmt->fetch())

【讨论】:

以上是关于根据haversine距离公式选择不同的列值?的主要内容,如果未能解决你的问题,请参考以下文章

根据第三列值在 bigquery 中选择两个不同的列

如何使用 Haversine 公式计算行驶距离(不是位移)?

Haversine 公式 - 数学略有偏差,不确定原因

用mysqli从haversine公式绑定距离参数

MySQL 大圆距离(Haversine 公式)

Haversine 公式错误 - 距离不正确 - Arduino