Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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
Javascript 使用单个sql查询的PHP分页_Javascript_Php_Html_Pagination - Fatal编程技术网

Javascript 使用单个sql查询的PHP分页

Javascript 使用单个sql查询的PHP分页,javascript,php,html,pagination,Javascript,Php,Html,Pagination,我正在尝试使用单个php sql查询归档分页,因为我觉得仅仅因为我想对数据分页而运行select语句两次太多了。我已经尝试了查询函数(*)count 我试着设置一个限制,如果行数等于我的限制,我会自动将其分页为两页,但我无法确定最多是第三页,因此这不是一个好方法 我考虑的另一种方法是获取所有数据,然后使用java脚本进行分页,但我不知道如何进行分页,因此我尝试使用php进行分页,但如果可能的话,我希望学习如何使用java脚本进行分页 我只想运行一个查询并分页感谢您的帮助 这是我的密码: &

我正在尝试使用单个php sql查询归档分页,因为我觉得仅仅因为我想对数据分页而运行select语句两次太多了。我已经尝试了查询函数
(*)count

我试着设置一个限制,如果
行数
等于我的限制,我会自动将其分页为两页,但我无法确定最多是第三页,因此这不是一个好方法

我考虑的另一种方法是获取所有数据,然后使用java脚本进行分页,但我不知道如何进行分页,因此我尝试使用php进行分页,但如果可能的话,我希望学习如何使用java脚本进行分页

我只想运行一个查询并分页感谢您的帮助

这是我的密码:

   <?php
    //count rows in table
    $query= "SELECT * FROM $database.$table WHERE `id` <> '$id'";
    $result= mysqli_query($conn, ($query));

    $results_per_page =30;

    //calculate total pages
    if($result)
    {
        $num_row = mysqli_num_rows($result);
        mysqli_free_result($result);
        $total_pages = ceil($num_row / $results_per_page);
    }   

    //to get page value
    if(isset($_GET["page"])){ 
        $page =$_GET["page"]; 
    } else{ 
        $page=1; 
    };
    $start_from = ($page-1) * $results_per_page;
    $start_from_here = mysqli_real_escape_string($conn, stripslashes($start_from));
    $start_from_here = filter_var($start_from_here, FILTER_SANITIZE_NUMBER_INT );

    //get data to display
    $query1= " SELECT * FROM $database.$table 
                WHERE `id` <> '$id' 
                ORDER BY type ASC 
                LIMIT $results_per_page OFFSET $start_from_here  ";
    $result1= mysqli_query($conn, ($query1));

由于您的第一个查询只查找行数,您可以通过选择行数来优化此查询

$query= "SELECT COUNT(*) FROM $database.$table WHERE `id` <> '$id'";
$query=“从$database.$table中选择COUNT(*),其中'id`'$id';
这样,SQL server将只返回行数,而不是匹配的行数

编辑


您还可以加载整个数据并将其存储在会话变量中。这样,您只需加载一次数据,就可以在不进行其他查询的情况下显示相关部分。

在单个查询中不可能同时执行这两项操作。您可以通过执行以下操作来优化聚合:

SELECT COUNT(1) AS row_count
FROM database.table_name
WHERE `id` <> YOUR_ID_HERE
选择计数(1)作为行计数
从database.table_name
你的身份证在哪里

然后,您可以使用row_count变量来执行有关总页数和限制的所有计算。

是的,我已经尝试过了,但希望能够对数据进行分页,否则我将显示所有数据。如果我这样做,我无法分页,我仍然必须使用第二个查询来限制和偏移数据,或者我应该直接获取数据所有的数据和行数,然后在我的循环中分页,以呼应出数据?但这将无法达到一次不获取整个数据的目的,比如如果表中有1000行呢?虽然计数是一个非常好的改进,但这并不能真正回答所问的问题。@Rafael,但是“一次读取所有内容”部分回答了“单一sql查询”的问题。您目前的方法到底有什么问题?@Sayra,看。除非您正在缓存从数据库中获得的结果(我没有看到这种情况发生),否则每次都会对将看到的每个页面执行相同的查询。鉴于这一事实,如果您仍然希望使用基于完整结果的分页,我将编写一个示例。这就是你想要表演的吗?(考虑到您可能拥有的行数,这可能会极大地影响它的性能)是的,我只想获得行数和分页的最佳方式,而不必查询表twiceI正在执行或找到一个解决方案,结果这一个很好,请检查:是的,您查询两次,但是对
FOUND\u ROWS()
的查询非常简单,它不需要访问表数据。
SELECT COUNT(1) AS row_count
FROM database.table_name
WHERE `id` <> YOUR_ID_HERE