繁体   English   中英

PHP分页,每页限制,mysql中的功能

[英]PHP pagination, limit per page, function in mysql

我有很大的mysql数据库,我想拒绝不在所需半径范围内的所有行。

$results_per_page = 10;
$city = "London";
$radius = 20;

mysql查询:

if($city != "") {
    $sql="SELECT * FROM city_items ORDER BY id ASC LIMIT " . $page_first_result . "," .  $results_per_page;
    find_all_in_radius($con, $sql, $city, $radius);
}

如果未设置$ city和$ radius,则一切正常

else {
    $sql="SELECT * FROM city_items ORDER BY id ASC LIMIT " . $page_first_result . "," .  $results_per_page;
    find_all($con, $sql);
}

我尝试了类似的东西:

function find_all_in_radius($con, $sql, $city, $radius) {
    $result1 = mysqli_query($con, $sql);  
    #geo_code find coordinates of provided city
    $long_lat = geo_code($city);
    echo '<div id="container">';
    $good_rows = array();

    while($row = mysqli_fetch_array($result1)) 
    { 
       $latitude = doubleval($long_lat[0]);
       $longitude = doubleval($long_lat[1]);
       $latit = doubleval($row[106]);
       $longtit = doubleval($row[107]);
       #distance() is function counting range between two coordinates
       if(!empty($latit) and !empty($longtit) and distance($latit, $longtit, $latitude, $longitude, "M") < $radius) 
        {
        array_push($good_rows, $row);
        }
    }
foreach($good_rows as $row) {
    echo $row[1];
    echo $row[2];
    }
}

所以问题是,如果$ city和$ radius为空,我将在10页上获得100个项目。 如果设置了$ city和$ radius,我得到10个项目,但一个是第二页,第二个是第四页。 有些行是空白的。 无:

"ASC LIMIT " . $page_first_result . "," .  $results_per_page;"

在mysql_query中,一切都很好,但是我在第一页上获得了所有结果,而没有任何分页工作。

编辑:我正在寻找一些魔术,它将允许我在mysql查询中运行php函数distance()…或绕过find_all_in_radius()函数中不符合条件的行,而不会破坏我的分页:D

没有魔术。 要么你

  1. 在MySQL中过滤和分页,或
  2. 提取所有数据,并在PHP中进行过滤和分页。

在第一种方法中,您必须在MySQL中实现distance函数。 那可能比您想的要容易。 如果您使用的是标准大圆距,则可以从MySQL大圆距(Haversine公式)复制代码

如果采用第二种方法,则必须获取所有行并保留匹配行的计数。

无论哪种情况,如果您确实有一个大数据库(数百万行),都会遇到性能问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM