gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:59:29 25 4
gpt4 key购买 nike

我有一个很大的 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 个项目,但其中一个在第 2 页,两个在第 4 页。有些行是空白的。没有:

"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 Great Circle Distance (Haversine formula) 复制代码。

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

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

关于PHP分页,每页限制,mysql中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53291028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com