gpt4 book ai didi

php - PHP多表的分页逻辑

转载 作者:行者123 更新时间:2023-11-29 01:44:02 24 4
gpt4 key购买 nike

我想用 PHP 准备一个包含多个 mysql 表的列表页面。所以这可以是 N 个表,每个表中的记录可以是任何东西,我想为此实现分页。这是在编写分页逻辑之前对我有用的信息:

define('RECORDS_PER_PAGE_SPLIT', 15);
$htmlTableList = array(
'_split_1' => 25,
'_split_2' => 4,
'_split_3' => 60
);

$currentPage = 1;
if (isset($_REQUEST['page'])) {
$currentPage = $_REQUEST['page'];
}
if ($currentPage == '' || $currentPage == '0') {
$currentPage = 1;
}
$offset = ($currentPage - 1) * RECORDS_PER_PAGE_SPLIT;

我想要一个 PHP 函数(它将包含多表分页的逻辑),它将返回以下数组:

//For page=1 in request:
Array{
0 => "SELECT * FROM _split_1 LIMIT 0, 15"
}

//For page=2 in request:
Array{
0 => "SELECT * FROM _split_1 LIMIT 15, 25",
1 => "SELECT * FROM _split_2 LIMIT 0, 4",
2 => "SELECT * FROM _split_3 LIMIT 0, 1",
}

//For page=3 in request:
Array{
0 => "SELECT * FROM _split_3 LIMIT 1, 16"
}

//For page=4 in request:
Array{
0 => "SELECT * FROM _split_3 LIMIT 16, 31"
}

如果有人已经写过这种分页逻辑,请提供功能。注意:这只是示例,但在我的实时应用程序中,每个表中的记录数将在 lacs 中。而且 table 的数量也不固定。它可以是 1 到 5 任何东西。

请帮忙。

最佳答案

详细说明我上面的回答......你想要做的是 UNION 所有结果集在一起,然后你可以让 MySQL 为你完成所有艰苦的工作。

所以你的代码应该是这样的:

define('RECORDS_PER_PAGE_SPLIT', 15);

$currentPage = !empty($_REQUEST['page']) ? (int) $_REQUEST['page'] : 1;

$offset = ($currentPage - 1) * RECORDS_PER_PAGE_SPLIT;

$query = "
SELECT SQL_CALC_FOUND_ROWS *
FROM (
SELECT *
FROM _split_1
UNION ALL
SELECT *
FROM _split_2
UNION ALL
SELECT *
FROM _split_3
) u
LIMIT $offset, ".RECORDS_PER_PAGE_SPLIT."
";

// This contains results for the page
$result = mysqli_query($conn, $query);

// If you want the total number of results to display or for other calulations
$query = "
SELECT FOUND_ROWS()
";
$foundRows = mysqli_query($conn, $query);

如果您不想知道结果总数,可以放弃第二个查询并从第一个查询中删除 SQL_CALC_FOUND_ROWS

Here是关于 SQL_CALC_FOUND_ROWS/FOUND_ROWS()

的更多信息

另请注意,如果您要应用 LIMIT,您还应该应用 ORDER BY 以保证合理的结果。

关于php - PHP多表的分页逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825874/

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