如何使用SQL对HTML表中的项进行排序


How to sort items in a HTML table using SQL?

我正在尝试使用$_GET来获取一个参数,这样,如果它选择了一个表标题,它将遍历我的if-else语句并进行相应的排序。

然而,我并没有取得多大成功。我先把它设置为按ID升序排序,我只是通过按降序点击ID进行测试。任何建议都是有用的。

 if(!isset($_SESSION['userid']))
 {
     header("Location: login.php");
     exit();
 }
 try
 {
     $sql = 'SELECT * FROM members ORDER by ID';
     $result = $pdo->query($sql);

       if($x == 2)
       {
           $sql = 'SELECT * FROM members ORDER by ID DESC';
           $result = $pdo->query($sql);
       }

}
catch (PDOException $e)
{
     echo 'Error fetching results: ' . $e->getMessage();
     exit();
}
  while ($row = $result->fetch())
  {
       $registrations[] = array(
       'ID' => $row['ID'],
       'email' => $row['email'],
       'fname' => $row['fname'],
       'mi' => $row['mi'],
       'institution' => $row['institution'],
       'lname' => $row['lname'],
       'uname' => $row['uname']);
}

echo '<table>';
echo '<thead><tr><th>Options</th><th>ID<a href="userlist.php?x=1">
     &utrif;</a> <a href="userlist.php?x=2">&dtrif;</a></th><th>Name 
     <ahref="userlist.php?x=3">&utrif;</a><a href="userlist.php?x=4"> &dtrif;
     </a></th><th>Institution <a href="userlist.php?x=5">&utrif;</a> 
     <a href="userlist.php?x=6">&dtrif;</a></th><th>Username 
     <a href="userlist.php?x=7">&utrif;</a> 
     <a href="userlist.php?x=8">&dtrif;</a></th><th>Email 
     <a href="userlist.php?x=9">&utrif;</a> 
     <a href="userlist.php?x=10">&dtrif;</a></th></tr></thead>';
 if($_SESSION['status'] == 1)
 {
     foreach ($registrations as $user)
     {
         echo '<tbody><tr><td><a href="userdetails.php?x=' .$user['ID']    
         .'">VIEW</a> </td>
        <td>'.$user['ID'].'</td>
        <td>'.$user['lname'].", ". $user['fname']." ". $user['mi'].".".'</td>
        <td>'.$user['institution'].'</td>
        <td>'.$user['uname'].'</td>
        <td>'.$user['email'].'</td> </tr> </tbody>';
     }
 }
 else
 {
    echo  '><tr><td><a href="userdetails.php?x='       
   .$_SESSION['userid'].'">VIEW</a></td> <td>'. $_SESSION['userid'].' </td>   
   <td>'.$_SESSION['lname'].", ". $_SESSION['fname']." ". 
   $_SESSION['mi'].".".'</td><td>'.$_SESSION['institution'].'</td>
   <td>'.$_SESSION['uname'].'</td><td>'.$_SESSION['email'].'</td></tr>';

}
echo '</table> ';
$x = $_GET['x'];
?>

您说过您初始化了$x=1。但是,除非您执行$x = (int)$_GET["x"],否则该值将保持不变,因此您将再次构建相同的页面。。。。

此外,我希望您不会在那里用不同的SQL语句构建SELECT结构——这将是许多不必要的代码应用。我会有一个$x的各种值的键数组,然后从中获取所需的键。。。

对HTML表进行排序的最简单方法是使用类似jquery tablesorter的东西。有关它的更多信息和示例,请访问@http://tablesorter.com/docs/

你需要导入这些脚本文件

<script type="text/javascript" src="/path/to/jquery-latest.js"></script> <script type="text/javascript" src="/path/to/jquery.tablesorter.js"></script>

然后添加一个具有表id 的类,如下所示

<table id="myTable" class="tablesorter">

然后触发脚本中的表排序功能

$(document).ready(function() { $("#myTable").tablesorter(); } );

看起来应该可以工作。您还可以对$注册进行排序
将ID添加到$registrations密钥:

   $registrations[$row['ID']] = array(
   'ID' => $row['ID'],
   'email' => $row['email'],
   'fname' => $row['fname'],
   'mi' => $row['mi'],
   'institution' => $row['institution'],
   'lname' => $row['lname'],
   'uname' => $row['uname']);

然后排序:

if($x == 2){
  krsort($registrations); // reverse sort DESC
}
else{
  ksort($registrations);
}

您可能想在$x排序上尝试反向逻辑:

   if($x != 2)
   {
     $sql = 'SELECT * FROM members ORDER by ID DESC';
   }
   else{
      $sql = 'SELECT * FROM members ORDER by ID ASC';
   }
   $result = $pdo->query($sql);

您可能有类型问题:

if($x == '2')

if (intval($x) == 2)

使默认排序为零并键入get:

$x = intval($_GET['x']);

如果GET中没有x值,这将使其为零并消除键入问题。

然后针对您的各种类型:

$sort[0] = 'ORDER BY `ID` ASC';
$sort[2] = 'ORDER BY `ID` DESC';
$sort[3] = ORDER BY `???`
$sql = "SELECT * FROM members $sort[$x]";