Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP分页、每页限制、mysql中的函数_Php_Mysql_Arrays - Fatal编程技术网

PHP分页、每页限制、mysql中的函数

PHP分页、每页限制、mysql中的函数,php,mysql,arrays,Php,Mysql,Arrays,我有一个很大的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($

我有一个很大的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,则一切正常 我试过这样的方法: 在mysql_查询中,一切都很好,但我在第一页获得所有结果,没有任何分页工作


编辑:我正在寻找一些魔术,可以让我在mysql查询中运行php函数distance()。。。或者,要绕过不符合条件的行,请使用find_all_in_radius()函数,在不破坏分页的情况下:D

没有任何魔术。要么你

  • 在MySQL中进行筛选和分页,或
  • 在PHP中获取所有数据并进行过滤和分页
  • 在第一种方法中,您必须在MySQL中实现
    distance
    函数。这可能比你想象的要容易。如果使用的是标准大圆距离,则可以从中复制代码

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


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

    您要做的是获取按页面排序的所有结果,然后根据城市和半径对其进行过滤。因此,留下的任何结果仍保留在其原始页面中。您需要先筛选,然后将它们排列在页面中。我昨天用array_slice()解决了这个问题,谢谢
    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];
        }
    }
    
    "ASC LIMIT " . $page_first_result . "," .  $results_per_page;"