只需添加 ORDER BY 子句即可重做查询。当然是这样的简单查询。
但是,可以将结果读入一个数组,然后使用 php usort 函数将它们排序为所需的顺序(但为了有用,您需要在页面刷新之间存储详细信息),或者您可以在 javascript 中排序客户端机器(但是您需要将所有数据下载到客户端,这会破坏分页带来的任何速度增益)
以及在 php 中执行此操作的示例(未经测试,请原谅任何拼写错误):-
<?php
switch (true)
{
case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'id' :
$Details = $_SESSION['details'];
usort($Details, 'id_sort');
break;
case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'name' :
$Details = $_SESSION['details'];
usort($Details, 'name_sort');
break;
case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'dob' :
$Details = $_SESSION['details'];
usort($Details, 'dob_sort');
break;
case is_array($_SESSION['details']) AND $_POST['sort_order'] == 'home_town' :
$Details = $_SESSION['details'];
usort($Details, 'home_town_sort');
break;
default :
$sql = "SELECT id, name, dob, home_town FROM Persons";
$Query = $db->query($sql);
$Details = array();
while($row=$db->fetchAssoc($Query))
{
$Details[] = $row;
}
$_SESSION['details'] = $Details;
break;
}
foreach($Details AS $aDetail)
{
echo $aDetail['id']."\t".$aDetail['name']."\t".$aDetail['dob']."\t".$aDetail['home_town']."\r\n";
}
function id_sort($a,$b)
{
$RetVar = 0;
switch (true)
{
case $a['id'] > $b['id'] :
$RetVar = 1;
break;
case $a['id'] < $b['id'] :
$RetVar = -1;
break;
default :
$RetVar = 0;
break;
}
return $RetVar;
}
function name_sort($a,$b)
{
$RetVar = 0;
switch (true)
{
case $a['name'] > $b['name'] :
$RetVar = 1;
break;
case $a['name'] < $b['name'] :
$RetVar = -1;
break;
default :
switch (true)
{
case $a['id'] > $b['id'] :
$RetVar = 1;
break;
case $a['id'] < $b['id'] :
$RetVar = -1;
break;
default :
$RetVar = 0;
break;
}
break;
}
return $RetVar;
}
function dob_sort($a,$b)
{
$RetVar = 0;
switch (true)
{
case $a['dob'] > $b['dob'] :
$RetVar = 1;
break;
case $a['dob'] < $b['dob'] :
$RetVar = -1;
break;
default :
switch (true)
{
case $a['name'] > $b['name'] :
$RetVar = 1;
break;
case $a['name'] < $b['name'] :
$RetVar = -1;
break;
default :
switch (true)
{
case $a['id'] > $b['id'] :
$RetVar = 1;
break;
case $a['id'] < $b['id'] :
$RetVar = -1;
break;
default :
$RetVar = 0;
break;
}
break;
}
break;
}
return $RetVar;
}
function home_town_sort($a,$b)
{
$RetVar = 0;
switch (true)
{
case $a['home_town'] > $b['home_town'] :
$RetVar = 1;
break;
case $a['home_town'] < $b['home_town'] :
$RetVar = -1;
break;
default :
switch (true)
{
case $a['name'] > $b['name'] :
$RetVar = 1;
break;
case $a['name'] < $b['name'] :
$RetVar = -1;
break;
default :
switch (true)
{
case $a['id'] > $b['id'] :
$RetVar = 1;
break;
case $a['id'] < $b['id'] :
$RetVar = -1;
break;
default :
$RetVar = 0;
break;
}
break;
}
}
return $RetVar;
}
?>
这样做的想法是存储详细信息(在示例中我使用了会话变量,但同样可以以您想要的任何其他方式存储),如果找到详细信息并传递排序顺序,则它使用 usort对这些细节进行排序。每个排序顺序使用一个函数,因此您还可以更改子顺序(即,id 应该是唯一的,因此您可以根据它进行排序,但本示例中的家乡可能不是唯一的,因此在其中按名称排序,然后在其中标识)。
您不必将排序指定到该级别,但我认为这个示例值得。