0

我在 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&amp;ord=1">Name</a></th><th><a href="?s=online&amp;ord=2">Surname</a></th><th><a href="?s=online&amp;ord=3">Date</a></th><th><a href="?s=online&amp;ord=4">Zone</a></th><th><a href="?s=online&amp;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 排序?谢谢你。

4

3 回答 3

2

如果你不介意的话,我只能想到 jQuery 解决方案:jQuery DataTables 插件。使用它可以消除不必要地调用数据库的需要。

最基本的实现是:

$(document).ready(function(){
    $('#example').dataTable();
});
于 2012-06-06T17:02:52.773 回答
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&sortorder=ASC”的请求变量,但是首先让上面的工作,然后你会看到它。

于 2012-06-08T14:56:51.027 回答
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,但也可以通过其他方式解决。这只是一些让您开始编码的基本信息,但如果您需要澄清,请发表评论

于 2012-06-06T17:08:03.780 回答