MySQL, ближайший результат — проблемы с геолокационным циклом PHP

Это мой PHP-код ..

<?php
$db = mysqli_connect('','','','');

$lat = "40.3828192";
$lon = "10.7234345";

$check = mysqli_query($db,"SELECT * ,(3956 * 2 * ASIN(SQRT(
POWER(SIN(($lat    - mlat) *  pi()/180 / 2), 2) +COS( $lat * pi()/180) *
COS(mlat * pi()/180) * POWER(SIN(( $lon - mlon) * pi()/180 / 2), 2) )))
AS distance FROM org HAVING distance < 50 ORDER BY distance ASC LIMIT 100");

$rowi = mysqli_fetch_array($check);

if ($rowi == 0) {
echo "No results nearby!";
}
else {
while($row=mysqli_fetch_array($check))
{
$distance= $row['distance'] * 60 * 1852;
echo $row['oname']; echo " - "; echo $distance; echo "<br>";
};
};

mysqli_close($db);
?>

Проблема у меня заключается в том, что повторяющиеся результаты в цикле не отображаются .. Я в настоящее время пытаюсь отобразить все строки базы данных в порядке ближайшего .. У меня в настоящее время 4, но только 3 показывают, так как 2 из них имеют те же координаты ..

Есть ли способ показать все строки, даже если некоторые имеют одинаковые координаты и с таким же расстоянием … Я также не уверен, что расстояние в метрах правильное … У меня есть 60NM для каждого градуса и 1852 для преобразования из NM ..

Фактическая проблема заключается в том, что первая строка, которая имеет те же координаты, с которыми мы проверяем ($ lat, $ lon), не перечисляется. При проверке других строк (копируемых) с теми же координатами они правильно возвращаются с расстояние 0 .. Где проблема?

0

Решение

Проблема заключалась в том, что я использовал массив fetch дважды, сначала для его проверки, а затем для вывода списка строк. Таким образом, первая строка отсутствовала. Я заменил ее на num_rows, и теперь она работает ..

<?php
$db = mysqli_connect('','','','');

$lat = "40.3828192";
$lon = "10.7234345";

$check = mysqli_query($db,"SELECT * ,(3956 * 2 * ASIN(SQRT(
POWER(SIN(($lat    - mlat) *  pi()/180 / 2), 2) +COS( $lat * pi()/180) *
COS(mlat * pi()/180) * POWER(SIN(( $lon - mlon) * pi()/180 / 2), 2) )))
AS distance FROM org HAVING distance < 50 ORDER BY distance ASC LIMIT 100");

$rowi = mysqli_num_rows($check);

if ($rowi == 0) {
echo "No results nearby!";
}
else {
while($row=mysqli_fetch_array($check))
{
$distance= $row['distance'] * 60 * 1852;
echo $row['oname']; echo " - "; echo $distance; echo "<br>";
};
};

mysqli_close($db);
?>

Тем не менее, я все еще не уверен насчет переноса расчета местоположения в php и из sql запроса. У кого-нибудь есть простое решение?

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector