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