根据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距离公式选择不同的列值?的主要内容,如果未能解决你的问题,请参考以下文章