gpt4 book ai didi

php - 触发单个查询来获取网格分页的记录

转载 作者:行者123 更新时间:2023-11-29 14:16:49 24 4
gpt4 key购买 nike

我正在 PHP 和 MySQL 中从数据库中获取记录并将其显示到 jqgrid 中。

现在我请求 1 个页面,其中第一个请求包含 10 行数据。

为了实现我触发一个查询来获取记录总数然后计算totalpages 包含所有总记录。

第二个查询触发有限记录,即1到10和下一次11到20等等。

所以问题是每次我都必须触发两个查询,一个查询用于获取记录总数,另一个查询用于获取网格的有限行。

是否可以只触发一个查询来实现上述目的?

要以正常方式获取记录,上述情况很好,但如果我执行搜索,那么我必须触发两个查询,一个查询用于获取与条件匹配的总行数,另一个查询仅获取满足条件的有限行

更新

好吧,我对行的访问限制取决于记录总数,因此我看不到任何仅触发一个查询的选项。请看看我的 PHP 代码是如何计算限制的

1) 触发查询以访问总记录

$selectMemberData = "SELECT * FROM tbl_member";
//some db code ...
// store the total records value
$count = $dbMemberData->numRows;



if( $count >0 ) {
$total_pages = ceil($count/$limit);
} else {
$total_pages = 0;
}

if ($page > $total_pages) $page=$total_pages;


$start = ( $limit * $page ) - $limit; // do not put $limit*($page - 1)

//Fire another query to fetch limited records

$selectMember = "SELECT * FROM tbl_member LIMIT " .$start.", ". $limit;

所以我担心的是,当我当时使用自动完成搜索时,触发这两个查询会非常昂贵。问题是我依赖于总记录来获取 startend 限制

最佳答案

select * 
from yourtable
inner join
(
select count(*) as count
from yourtable
) as t2
limit 0,10

这将为每一行添加一个额外的计数列,这将是一个查询中整个表的行总数。

sqlfiddle举个例子

如果您不想使用联接,则可以使用联合:

select id,count(*) as data 
from yourtable
union all
select *
from yourtable
limit 0, 10

但是您必须在第一个选择中声明所有列。您可以将其编写为 null as column_name ,除了您想要保存计数的列(如果您希望它们为空),否则它们将只保存随机数据。

sqlfiddle

我假设您在数据上使用 while 循环,因此您可以使用:

mysql_fetch_assoc($row);
$all_records_count = $row['data'];
while(mysql_fetch_assoc($row)){
...do something with results...}

获取将保存计数的第一行,然后开始循环遍历之后的结果。

关于php - 触发单个查询来获取网格分页的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12519517/

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