PHP mysqli_fetch_array选择最小值[重复]

Posted

技术标签:

【中文标题】PHP mysqli_fetch_array选择最小值[重复]【英文标题】:PHP mysqli_fetch_array selecting smallest values [duplicate] 【发布时间】:2017-04-11 02:18:46 【问题描述】:

大家好,感谢您的帮助。 我想要做的是使用用户的纬度和经度,并将其与我保存在数据库中的纬度和经度以及相关的城市名称进行比较。我现在拥有的代码有效,但问题是在 30 英里半径内可能有不止一行。看看我的代码,如果可以的话,请帮助我。

<?php function distance($lat1, $lon1, $lat2, $lon2) 

    $pi80 = M_PI / 180;
    $lat1 *= $pi80;
    $lon1 *= $pi80;
    $lat2 *= $pi80;
    $lon2 *= $pi80;

    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;
    $dlon = $lon2 - $lon1;
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlon / 2) * sin($dlon / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;

    //echo '<br/>'.$km;
    $km = $km * 0.621371;
    return $km;
 
    include_once("dbconnect.php");
    /* check connection */
    if ($mysqli->connect_errno) 
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    
    $grabCities = "SELECT * FROM cities";
    $result = $mysqli->query($grabCities);
    while($row = mysqli_fetch_array($result)) 
    $distance = distance(41.08866717,-81.4780426,$row['lat'],$row['longitude']);
    if ($distance < 30)
        echo $myCity = $row['City'] . "<BR>";
    

    
    $mysqli->close();
?>

【问题讨论】:

这里真的不清楚你在问什么。 我想做的是从我的数据库中得到的所有结果;转换纬度和经度。找到离用户最近的城市,然后选择那个城市。 @Augwa 您可以在 SQL 中执行此操作,只需对结果进行排序,限制为 1。 不,我根据距离得到了正确的计算;我需要整理我的结果,从 416 个中选择一个数字最小的那个,以及那个城市的名称。它保存在我的数据库中。 @Augwa 我不能用 SQL 来做,因为我只会抓取一行,有 416 行;我不想比较一个。我想比较它们并找出最近的城市。 @Augwa 【参考方案1】:

您可以使用 MYSQL 执行此操作,返回 1 个结果,这是您想要的结果。

sprintf('
    SELECT
        *,
        (((acos(sin((%1$d*pi()/180)) * 
            sin((`lat`*pi()/180))+cos((%1$d*pi()/180)) * 
            cos((`lat`*pi()/180))*cos(((%2$d-`longitude`) * 
            pi()/180))))*180/pi())
        ) as distance
        FROM `cities` 
    ORDER BY
        distance ASC
    LIMIT 1
    ',
    $latitude,
    $longitude
);

【讨论】:

【参考方案2】:

这样的?未经测试。

$smallestDistance = null;

while($row = mysqli_fetch_array($result)) 
    $distance = distance(41.08866717,-81.4780426,$row['lat'],$row['longitude']);
    if ($distance < $smallestDistance)
        $myCity = $row['City'];
    
    $smallestDistance = $distance;


echo $myCity;

【讨论】:

我希望它会起作用,但它把我带到了随机的城市;我应该期待的城市是阿克伦/俄亥俄州。这是我默认输入的坐标。

以上是关于PHP mysqli_fetch_array选择最小值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 mysqli_fetch_array?我使用 php、mysqli 和 html

在 while 循环中使用 mysqli_fetch_array 时,PHP/MySQL 如何知道获取下一行?

PHP mysqli_free_result()与mysqli_fetch_array()函数

为啥 mysqli_fetch_array() 返回数组大小的两倍? [关闭]

PHP - 选择然后插入时是不是需要 fetch_array

报错提示:mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in..的处理方式