mysql - 来自我的查询的分组方式会干扰分页
问题描述
再会。请我如何在下面重新编写此查询以消除GROUP BY因为它会干扰分页并且在数据库最终变大时不牺牲性能?这是完整的代码
$query = "report INNER JOIN ratings INNER JOIN seg WHERE report.bUser =
seg.bUser AND report.sUser = ratings.sUser GROUP BY ratings.sUser";
function pagination($query, $per_page = 10, $page = 1, $url = '?'){
include_once ('DBManager.php');
$conn = DBManager::getConnection();
$query = "SELECT COUNT(report.id) as `num` FROM {$query}";
foreach($conn->query($query) as $row);
$total = $row['num'];
$adjacents = "2";
//Ronald's code begins
$url = '?';
foreach($_GET as $k => $v) {
if($k != 'page') {
$url .= "{$k}={$v}&";
}
}
//Ronald's code ends
$page = ($page == 0 ? 1 : $page);
$start = ($page - 1) * $per_page;
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total/$per_page);
$lpm1 = $lastpage - 1;
$pagination = "";
if($lastpage > 1)
{
$pagination .= "<ul class='pagination'>";
$pagination .= "<li class='details'>Page $page of $lastpage</li>";
if ($lastpage < 7 + ($adjacents * 2))
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<li><a class='current'>$counter</a></li>";
else
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";
}
}
elseif($lastpage > 5 + ($adjacents * 2))
{
if($page < 1 + ($adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($counter == $page)
$pagination.= "<li><a class='current'>$counter</a></li>";
else
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";
}
$pagination.= "<li class='dot'>...</li>";
$pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
$pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";
}
elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
{
$pagination.= "<li><a href='{$url}page=1'>1</a></li>";
$pagination.= "<li><a href='{$url}page=2'>2</a></li>";
$pagination.= "<li class='dot'>...</li>";
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
{
if ($counter == $page)
$pagination.= "<li><a class='current'>$counter</a></li>";
else
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";
}
$pagination.= "<li class='dot'>..</li>";
$pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
$pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";
}
else
{
$pagination.= "<li><a href='{$url}page=1'>1</a></li>";
$pagination.= "<li><a href='{$url}page=2'>2</a></li>";
$pagination.= "<li class='dot'>..</li>";
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $page)
$pagination.= "<li><a class='current'>$counter</a></li>";
else
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";
}
}
}
if ($page < $counter - 1){
$pagination.= "<li><a href='{$url}page=$next'>Next</a></li>";
$pagination.= "<li><a href='{$url}page=$lastpage'>Last</a></li>";
}else{
$pagination.= "<li><a class='current'>Next</a></li>";
$pagination.= "<li><a class='current'>Last</a></li>";
}
$pagination.= "</ul>\n";
}
return $pagination;
}
目前,分页不会显示在使用此功能的页面上,而是显示在我没有使用 GROUP BY 的页面上。在另一个页面上的另一个实例中,我的行结果翻了一番。如果这可以排序,我可以修复其他几个区域。我希望我的问题现在很清楚。谢谢大家的意见。
解决方案
推荐阅读
- java - 关于片段生命周期
- kibana - 如何将背景颜色应用于同一仪表板中的 Kibana 表(或不)
- python - 通过固定唯一的对角线值来归一化对称矩阵
- odoo-13 - Odoo 13 CRM Kanban 将列隐藏到特定组
- google-cloud-functions - Google actions webhook 部署云功能失败
- google-cloud-platform - 无法连接谷歌云外部静态ip
- operating-system - 上下文切换是影响进程同步中有限等待的唯一因素吗?
- c++ - 为什么我的合并排序程序出现分段错误错误
- visual-studio-code - 通过 VSCode-Remote-SSH 终端访问时,远程机器不要求提供私人仓库的 git 用户/密码
- nativescript - NativeScript Angular .ics 文件导出