【问题标题】:Select distinct column value based on haversine distance formula?根据haversine距离公式选择不同的列值?
【发布时间】: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()){
}

【问题讨论】:

    标签: php mysqli haversine


    【解决方案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()){
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      相关资源
      最近更新 更多