PHP分页、每页限制、mysql中的函数
我有一个很大的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($
$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没有任何魔术。要么你
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;"