Выберите отдельное значение столбца на основе формулы расстояния haversine? - PullRequest
2 голосов
/ 12 апреля 2020

Я пытаюсь запросить все различные 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 Ответ

1 голос
/ 12 апреля 2020

Использование 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()){
}
...