码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何使用 PHP 和 MySQL 对表列进行排序


    How to Sort Table Columns with PHP and MySQL

    在本教程中,我们将使用 HTML、PHP 和 MySQL 对表列进行排序。我们的表将包含来自 MySQL 数据库的记录,HTML 表头将是可点击的,因此用户可以切换是否要按升序或降序(最低或最高)排序。

    你可能会问为什么要这样做?它只是允许您的用户与您的表交互的那些功能之一,也许您有一个包含多个页面的表,其中包含数百或数千条记录,并且用户可能希望按特定列排序,例如具有名称 Date,或名称为 Age 的列。

    创建 MySQL 数据库

    我们需要一个数据库来连接,这样我们就可以在我们的 HTML 表中显示记录。您可以使用现有数据库或使用 phpMyAdmin 或您首选的数据库管理工具运行下面的 SQL 语句。

    1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    2. SET time_zone = "+00:00";
    3. CREATE DATABASE IF NOT EXISTS `tablesort` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    4. USE `tablesort`;
    5. CREATE TABLE IF NOT EXISTS `students` (
    6. `id` int(11) NOT NULL,
    7. `name` varchar(255) NOT NULL,
    8. `age` tinyint(100) NOT NULL,
    9. `joined` varchar(255) NOT NULL
    10. ) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
    11. INSERT INTO `students` (`id`, `name`, `age`, `joined`) VALUES
    12. (1, 'David Deacon', 23, '17/08/2018'),
    13. (2, 'Sheri Warner', 19, '03/05/2018'),
    14. (3, 'Sean Glover', 24, '24/07/2018'),
    15. (4, 'John West', 17, '13/08/2018'),
    16. (5, 'Rufus Clarke', 20, '28/07/2018'),
    17. (6, 'Roosevelt Myers', 20, '25/07/2018'),
    18. (7, 'Elvira Andrews', 22, '02/07/2018'),
    19. (8, 'Richard Cook', 26, '19/07/2018'),
    20. (9, 'Lorenzo Harris', 23, '01/07/2018'),
    21. (10, 'Eduardo Hoffman', 17, '03/07/2018'),
    22. (11, 'Jeanne Fisher', 20, '13/08/2018'),
    23. (12, 'Tracy Bowers', 30, '07/07/2018'),
    24. (13, 'Heidi Lawrence', 18, '04/06/2018'),
    25. (14, 'Tara Holland', 25, '01/07/1991'),
    26. (15, 'Grant Edwards', 22, '22/06/2018'),
    27. (16, 'Bradford Green', 29, '02/05/2018'),
    28. (17, 'Gwen Schultz', 20, '02/05/2018'),
    29. (18, 'Hope Dawson', 28, '21/08/2018'),
    30. (19, 'Florence Osborne', 19, '17/05/2018'),
    31. (20, 'Rickey Poole', 26, '28/06/2018'),
    32. (21, 'Casey Sutton', 28, '06/07/2018'),
    33. (22, 'Willie Lowe', 23, '11/05/2018'),
    34. (23, 'Stephen Schultz', 28, '15/07/2018'),
    35. (24, 'Eileen Lynch', 18, '12/06/2018'),
    36. (25, 'Aaron Ruiz', 29, '02/05/2018'),
    37. (26, 'Mae Murray', 30, '24/06/2018'),
    38. (27, 'Regina Hanson', 21, '26/07/2018'),
    39. (28, 'Cameron Mclaughlin', 20, '29/07/2018'),
    40. (29, 'Earl Hale', 17, '30/06/2018'),
    41. (30, 'Marta Blair', 24, '10/06/2018'),
    42. (31, 'Alberta Silva', 22, '05/06/2018'),
    43. (32, 'Joanna Holmes', 20, '20/05/2018'),
    44. (33, 'Alex Brock', 30, '12/05/2018'),
    45. (34, 'Colin Wright', 19, '28/05/2018'),
    46. (35, 'Peter Schmidt', 25, '10/07/2018'),
    47. (36, 'Joshua Price', 27, '13/07/2018'),
    48. (37, 'Elias Chandler', 22, '19/07/2018'),
    49. (38, 'Stanley Ross', 21, '02/06/2018'),
    50. (39, 'Vera Cole', 26, '02/05/2018'),
    51. (40, 'Johnny Daniels', 29, '19/07/2018'),
    52. (41, 'Yvonne Hopkins', 21, '16/07/2018');
    53. ALTER TABLE `students`
    54. ADD PRIMARY KEY (`id`);
    55. ALTER TABLE `students`
    56. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=42;

    上面的语句将创建数据库表排序与桌子学生,我们将在本教程中使用此表。

    使用 PHP 和 MySQL 对表进行排序

    现在我们可以继续创建我们的 PHP 文件,创建一个名为的新 PHP 文件表格排序.php.

    连接到我们的 MySQL 数据库:

    $mysqli = mysqli_connect('localhost', 'root', '', 'tablesort');
    

    让我们创建一些我们将使用的变量:

    1. $columns = array('name','age','joined');
    2. $column = isset($_GET['column']) && in_array($_GET['column'], $columns) ? $_GET['column'] : $columns[0];
    3. $sort_order = isset($_GET['order']) && strtolower($_GET['order']) == 'desc' ? 'DESC' : 'ASC';

    下面我将解释每个变量的用途。

    $列- 这将是我们将用于表的列数组,这基本上是防止 SQL 注入的安全检查,我们要确保用户不会尝试任何可疑的事情,您可以更改此变量,添加或删除数组中的列名。

    $列- 这个变量将决定我们将根据哪一列进行排序,如果它出现在 URL 中,那么它将出现在我们的脚本中,我们还会检查请求的列名是否在我们的$列大批。默认为第一列$列如果没有数组得到要求。

    $sort_order- 这个变量将决定排序顺序,基本上,我们可以按升序(ASC)或降序(DESC)排序。如果没有得到请求它将默认为升序。

    我们现在可以从我们的数据库表中获取记录。

    if ($result = $mysqli->query('SELECT * FROM students ORDER BY ' .  $column . ' ' . $sort_order)) {
    

    并创建更多变量:

    1. $up_or_down = str_replace(array('ASC','DESC'), array('up','down'), $sort_order);
    2. $asc_or_desc = $sort_order == 'ASC' ? 'desc' : 'asc';
    3. $add_class = ' class="highlight"';

    这些变量将做什么:

    $up_or_down- 这个变量将与字体真棒一起使用,我们希望那些小的上下图标出现在表格列名旁边,这个变量基本上决定了列的排序方式,并将该图标显示给用户。

    $asc_or_desc- 该变量将用于确定活动列的切换状态,是否应该按升序或降序排序,基本上,如果用户已经单击了列名,我们要确保当他们再次单击列名时它将以相反的顺序排序。

    $add_class- 这基本上会突出显示活动列,这是可选的,你并不需要它,它只是让表格更吸引人。

    现在我们可以按各自的顺序显示记录。

    1. "tablesort.php?column=name&order=$asc_or_desc; ?>">Nameclass="fas fa-sortphp echo $column == 'name' ? '-' . $up_or_down : ''; ?>">i>a>th>
    2. <th><a href="tablesort.php?column=age&order=php echo $asc_or_desc; ?>">Age<i class="fas fa-sortphp echo $column == 'age' ? '-' . $up_or_down : ''; ?>">i>a>th>
    3. <th><a href="tablesort.php?column=joined&order=php echo $asc_or_desc; ?>">Join Date<i class="fas fa-sortphp echo $column == 'joined' ? '-' . $up_or_down : ''; ?>">i>a>th>
    4. tr>
    5. php while ($row = $result->fetch_assoc()): ?>
    6. <tr>
    7. <tdphp echo $column == 'name' ? $add_class : ''; ?>>php echo $row['name']; ?>td>
    8. <tdphp echo $column == 'age' ? $add_class : ''; ?>>php echo $row['age']; ?>td>
    9. <tdphp echo $column == 'joined' ? $add_class : ''; ?>>php echo $row['joined']; ?>td>
    10. tr>
    11. php endwhile; ?>
    12. table>
    13. 如您所见,我们使用了我们创建的变量,并且我们还检查了正在排序的表列。这while 循环将从我们的表中循环我们的记录学生并对它们进行相应的排序。

      让我们为 HTML 表格添加一些样式,将代码添加到您的 CSS 文件或文档的头部:

      1. table {
      2. border-collapse: collapse;
      3. width: 500px;
      4. }
      5. th {
      6. background-color: #54585d;
      7. border: 1px solid #54585d;
      8. }
      9. th:hover {
      10. background-color: #64686e;
      11. }
      12. th a {
      13. display: block;
      14. text-decoration:none;
      15. padding: 10px;
      16. color: #ffffff;
      17. font-weight: bold;
      18. font-size: 13px;
      19. }
      20. th a i {
      21. margin-left: 5px;
      22. color: rgba(255,255,255,0.4);
      23. }
      24. td {
      25. padding: 10px;
      26. color: #636363;
      27. border: 1px solid #dddfe1;
      28. }
      29. tr {
      30. background-color: #ffffff;
      31. }
      32. tr .highlight {
      33. background-color: #f9fafb;
      34. }

      我们还需要 Font Awesome 图标,在文档的 head 部分添加 Font Awesome CDN 代码:

      <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

      我们的表格现在应该看起来像这样:


       

      完整来源

      1. // Below is optional, remove if you have already connected to your database.
      2. $mysqli = mysqli_connect('localhost', 'root', '', 'tablesort');
      3. // For extra protection these are the columns of which the user can sort by (in your database table).
      4. $columns = array('name','age','joined');
      5. // Only get the column if it exists in the above columns array, if it doesn't exist the database table will be sorted by the first item in the columns array.
      6. $column = isset($_GET['column']) && in_array($_GET['column'], $columns) ? $_GET['column'] : $columns[0];
      7. // Get the sort order for the column, ascending or descending, default is ascending.
      8. $sort_order = isset($_GET['order']) && strtolower($_GET['order']) == 'desc' ? 'DESC' : 'ASC';
      9. // Get the result...
      10. if ($result = $mysqli->query('SELECT * FROM students ORDER BY ' . $column . ' ' . $sort_order)) {
      11. // Some variables we need for the table.
      12. $up_or_down = str_replace(array('ASC','DESC'), array('up','down'), $sort_order);
      13. $asc_or_desc = $sort_order == 'ASC' ? 'desc' : 'asc';
      14. $add_class = ' class="highlight"';
      15. ?>
      16. PHP & MySQL Table Sorting by CodeShack
      17. "utf-8">
      18. "stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
      19. "tablesort.php?column=name&order=$asc_or_desc; ?>">Nameclass="fas fa-sortphp echo $column == 'name' ? '-' . $up_or_down : ''; ?>">i>a>th>
      20. <th><a href="tablesort.php?column=age&order=php echo $asc_or_desc; ?>">Age<i class="fas fa-sortphp echo $column == 'age' ? '-' . $up_or_down : ''; ?>">i>a>th>
      21. <th><a href="tablesort.php?column=joined&order=php echo $asc_or_desc; ?>">Join Date<i class="fas fa-sortphp echo $column == 'joined' ? '-' . $up_or_down : ''; ?>">i>a>th>
      22. tr>
      23. php while ($row = $result->fetch_assoc()): ?>
      24. <tr>
      25. <tdphp echo $column == 'name' ? $add_class : ''; ?>>php echo $row['name']; ?>td>
      26. <tdphp echo $column == 'age' ? $add_class : ''; ?>>php echo $row['age']; ?>td>
      27. <tdphp echo $column == 'joined' ? $add_class : ''; ?>>php echo $row['joined']; ?>td>
      28. tr>
      29. php endwhile; ?>
      30. table>
      31. body>
      32. html>
      33. php
      34. $result->free();
      35. }
      36. ?>

      37.  

        结论

        这基本上就是您使用 PHP 和 MySQL 对表进行排序的方式,您现在应该对如何创建自己的代码或修改我们现有的代码有一个大致的了解。

        这可能需要更多的工作,但如果您想实现页面不重新加载的解决方案,您可以使用 JavaScript 和 AJAX。

        如果您还没有,请不要忘记分享这篇文章并在社交媒体上关注我们,更多有用的教程将会出现。享受编码!

         

      38. 相关阅读:
        第六章集成测试
        二叉搜索树的Java递归实现
        计算机网络(四)传输层
        记liunx服务器java程序无法访问的问题处理
        UDP通信,Let‘s go!
        Vue2-父子组件传值
        软件测试——从0开始的ios自动化测试(二)
        echarts条形图实现颜色渐变
        PLC数据采集案例
        各种大佬写的爬虫相关的框架汇总
      39. 原文地址:https://blog.csdn.net/allway2/article/details/126408192
        • 最新文章
        • 沪漂五周年了:我越来越迷茫了
          Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
          MySQL-Seconds_behind_master的精度误差
          [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
          AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
          Agent OS :五种驯服不确定性的范式
          PortSwigger SQL注入LAB11
          数据库即时编译JIT
          [Begin]AI Learn Data Day 0
          深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
        • 热门文章
        • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
          奉劝各位学弟学妹们,该打造你的技术影响力了!
          五年了,我在 CSDN 的两个一百万。
          Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
          面试官都震惊,你这网络基础可以啊!
          你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
          心情不好的时候,用 Python 画棵樱花树送给自己吧
          通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
          13 万字 C 语言从入门到精通保姆级教程2021 年版
          10行代码集2000张美女图,Python爬虫120例,再上征途
        小工具 小游戏
        Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

        京公网安备 11010502049817号