gpt4 book ai didi

php - 使用列值作为计数限制结果数

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

我有两个查询,一个将从主表中获取 ID 列表,另一个将获取另一个表中与该 ID 相关的所有记录。

我想将它分成几页结果,但我的谷歌搜索只出现了那些希望每个列值有一定数量结果的人,而不是那些想通过它限制总计数的人。

主表有一列包含记录数,因此实际上不需要读取其他表。该限制将用作最小值,因此如果在限制之后当前组中仍有记录,它将继续显示它们。这将以某种方式计算为偏移量的一部分,因此它可以从正确的位置开始。

这是我的意思的一个例子:

表 1:

ID | Records
1 | 2
2 | 3
3 | 28
4 | 7
...

表2(本题不需要知道内容):

ID | GroupID | Value
1 | 1 | x
2 | 1 | x
3 | 2 | x
4 | 2 | x
5 | 2 | x
6 | 3 | x
...

例如,如果限制为 3,则 12 都应该显示在第一页上,因为只有 1 本身在限制之下。下一页将从 3 开始,它将占据整个页面。

我可以使用 PHP 手动计数,直到达到限制,但如果有很多页面,它最终可能会变慢(不过我不知道 mysql 在这方面是否会更好)。这是一个简单的示例,说明如何获取偏移量:

$page = 2;
$limit = 40;

$count = 0;
$current_page = 1;

$query = 'SELECT ID, Records FROM table1';
$stmt = $conn->prepare($query);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$count += $row['Records'];
if($count > $limit){
$current_page ++;
$count = 0;
if($current_page == $page){
$start_id = $row['ID'];
break;
}
}
}

最佳答案

更新:

“自定义”Pagination是你要找的。因此,如果您打算从一个页面跳到另一个页面,则不能使用硬编码的 $page$current_page 值。一旦您在特定页面上,这些值应该动态生成。事实上,您应该在 URL 的查询部分中包含 ID 列值,这样分页链接才能满足您的业务逻辑。

假设您的 ID 列值从 1 开始,您的代码应如下所示:

$id = isset($_GET['id']) && is_numeric($_GET['id']) ? $_GET['id'] : 1;
$limit = 40;

// Display query results based on particular ID number
$query = 'SELECT ID, Records FROM table1 WHERE ID >= ' . $id;
$stmt = $conn->prepare($query);
$stmt->execute();
$rowCount = $stmt->rowCount();
if($rowCount){
$total = 0;
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
if($total <= $limit){
$total += $row['Records'];
// Display $row details here
}else{
// Get the next $id value
$id = $row['ID'];
break;
}
}
}

// Display relevant ID links
$query = 'SELECT * FROM table1';
$stmt = $conn->prepare($query);
$stmt->execute();

$idArr = array();
$total = 0;
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
if($total == 0){
$idArr[] = $row['ID'];
}
if($total <= $limit){
$total += $row['Records'];
}else{
$total = 0;
}
}

foreach($idArr as $idValue){
if($idValue == $id){
echo '<a>'.$idValue.'</a> ';
}else{
echo '<a href="?id='.$idValue.'">'.$idValue.'</a> ';
}
}

旁注:如果表的 ID 列值不是从 1 开始,则使用单独的查询获取第一个ID 值并更新以下语句,

$id = isset($_GET['id']) && is_numeric($_GET['id']) ? $_GET['id'] : <FIRST_ID_VALUE>;

关于php - 使用列值作为计数限制结果数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662653/

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