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 plugin。これを使用すると、データベースを不必要に呼び出す必要がなくなります。

最も基本的な実装は次のとおりです。

$(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」変数を処理するときに、「Name」列ヘッダーに基づいて実行されます。これを実行したら、「?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 に答える