我在PHP中有一个像这样的脚本:
if(isset($_GET["ord"]))
{
switch($_GET["ord"])
{
case 1: $ord = "name ASC";
break;
case 2: $ord = "surname ASC";
break;
case 3: $ord = "date ASC";
break;
case 4: $ord = "zone ASC";
break;
case 5: $ord = "latency DESC";
break;
default: $ord = "name ASC";
break;
}
}
else
{
$ord = "name ASC";
}
在像这样的代码中使用它:
$res = mysql_query("SELECT people.name AS Name, surname, date, zone, latency FROM people WHERE online=1 ORDER BY $ord");
$content->ADD('<table class="online"><tr><th><a href="?s=online&ord=1">Name</a></th><th><a href="?s=online&ord=2">Surname</a></th><th><a href="?s=online&ord=3">Date</a></th><th><a href="?s=online&ord=4">Zone</a></th><th><a href="?s=online&ord=5">Latency</a></th></tr>');
while ($resss = mysql_fetch_array($res))
{
$content->ADD('<tr><td align="center">'.$resss["name"].'</td>');
$content->ADD('<td>'.$resss["surname"].'</td>');
$content->ADD('<td>'.$resss["date"].'</td>');
$content->ADD('<td>'.$resss["zone"].'</td>');
$content->ADD('<td>'.$resss["latency"].'</td>');
$content->ADD('</tr>');
}
它实际上工作非常棒但是当我需要更改ASC和DESC排序时我有问题 - 所以我的问题是如何重写我的脚本也可以在输出数据中使用acs / desc排序?谢谢。
答案 0 :(得分:2)
如果您不介意的话,我只能想到jQuery解决方案:jQuery DataTables plugin。使用它将消除不必要地调用数据库的需要。
最基本的实现是:
$(document).ready(function(){
$('#example').dataTable();
});
答案 1 :(得分:1)
假设您有一个带名称的标题行,例如:
$content->ADD('<tr><td align="center">Name</td>');
您可以将其更改为:
$sort_order = "name ASC";
if($ord == 'name ASC') {
$sort_order = "name DESC";
}
$content->ADD('<tr><td align="center"><a href="?ord=$sort_order">Name</a></td>');
然后,当您的脚本处理“ord”变量时,它将基于您的“名称”列标题。一旦你开始这样做,你可能想要改变你的变量,使用类似“?sortby = name&amp; sortorder = ASC”的请求变量,但先完成上述工作,然后你会看到它。 / p>
答案 2 :(得分:0)
整个开关有点不必要。执行ORDER BY
时,您可以指定要在查询中按其数字位置(顺序)排序的列。
select `uid`, `name` from `test` order by `uid` asc
应该提供与
相同的结果select `uid`, `name` from `test` order by 1 asc
您可以使用开关修改代码以接受desc
/ asc
的参数,并只使用数字作为order by
目标。您发布的交换机的好处是不会产生奇怪的查询,例如order by 555
,但这也可以通过其他方式解决。这只是帮助您开始编码的一些基本信息,但如果您需要澄清,请发表评论