Select 基于 haversine 距离公式的不同列值?

Select distinct column value based on haversine distance formula?

我正在尝试根据与用户的距离查询所有不同的 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()){
}

使用GROUP BY 它表现得像 distinct

$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()){
}