我有一个运行查询的分页类,只返回指定的行页面。
这是关注的功能。它工作得很好,但我的问题是我想添加排序功能。
private function GetData($Query, $PageNumber, $RowsPerPage) {
$stmt = dbQuery($Query, 'static');
$this->TotalNumOfRows = sqlsrv_num_rows($stmt);
$this->_NumberOfPages = ceil($this->TotalNumOfRows / $this->_RowsPerPage);
$offset = ($PageNumber - 1) * $RowsPerPage;
$rows = [];
$i = 0;
while (($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_ABSOLUTE, $offset + $i)) && $i < $RowsPerPage) {
$rows[] = $row;
$i++;
}
$this->CurrentPageNumOfRows = $i;
return $rows;
}
我有一个排序函数,我用它来按列索引对数组进行排序。
function gfSortArray($a, $b) {
$pSort = gfGetVar('pSort', 0);
$pDir = gfGetVar('pDir', 'desc');
if ($pDir == 'asc') {
return strnatcmp($a[$pSort], $b[$pSort]);
}
else {
return strnatcmp($b[$pSort], $a[$pSort]);
}
}
我可以将函数添加到我的分页类中,但问题是它只对指定的行进行排序。例如1-100。但我需要在while循环之前对整个数组进行排序,以便正确排序。
这是排序功能。
private function GetData($Query, $PageNumber, $RowsPerPage) {
$stmt = dbQuery($Query, 'static');
$this->TotalNumOfRows = sqlsrv_num_rows($stmt);
$this->_NumberOfPages = ceil($this->TotalNumOfRows / $this->_RowsPerPage);
$offset = ($PageNumber - 1) * $RowsPerPage;
$rows = [];
$i = 0;
while (($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_ABSOLUTE, $offset + $i)) && $i < $RowsPerPage) {
$rows[] = $row;
$i++;
}
$this->CurrentPageNumOfRows = $i;
//sorting
usort($rows, ['Paging', 'gfSortArray']);
return $rows;
}
问题: 有没有办法在While循环之前对SQL_SRV_QUERY结果进行排序?