PHP MySQL Order By

2025年5月22日 | 阅读 6 分钟

ORDER BY 子句在 SQL 中与 SELECT 语句一起使用,以按一列或多列的升序或降序排列结果集。排序可以按升序 (ASC) 或降序 (DESC) 进行。如果未给出关键字,则数据默认按升序排序。

语法

其中,

  • SELECT 从表中选择应检索数据的列。您可以在 SELECT 子句中指定一个或多个列(* 表示所有列),
  • FROM table_name 表示要从该表中获取记录。
  • ORDER BY column_name(s) 指定用于排序结果的列(可以使用一列或多列),
  • ASC | DESC 是排序的语句。ASC 是标准排序,即升序,DESC 是降序。

注意:默认情况下,ORDER BY 子句按升序对记录进行排序,即使末尾没有指定 ASC。

已弃用的 mysql_query()

在旧版本的 PHP 中,mysql_query() 用于运行 SQL 查询。但是,此函数在 PHP 5.5 中已被弃用,在 PHP 7 中已被删除。现在,建议使用

  • mysqli_query() (MySQLi - 改进的 MySQL)
  • PDO::query() (PHP 数据对象)

ORDER BY 升序排列

查询

示例

输出

EMP ID: 3
EMP NAME: Alice
EMP SALARY: 35000
-----------------------------
EMP ID: 1
EMP NAME: Bob
EMP SALARY: 30000
-----------------------------
EMP ID: 2
EMP NAME: Charlie
EMP SALARY: 40000
-----------------------------

说明

此脚本从 emp4 表检索所有行,并按 name 列的升序对结果集进行排序。

排序前(emp4 表)

idnamesalary
1Bob30000
2查理40000
3Alice35000

排序后(ORDER BY name)

idnamesalary
3Alice35000
1Bob30000
2查理40000

ORDER BY 降序排列

查询

示例

输出

Connected successfully
EMP ID :3
EMP NAME : jai
EMP SALARY : 90000
--------------------------------
EMP ID :2
EMP NAME : karan
EMP SALARY : 40000
--------------------------------
EMP ID :1
EMP NAME : ratan
EMP SALARY : 9000
--------------------------------

说明

此脚本已连接到 test 数据库,并从 emp5 表中获取所有行。然后,它根据 salary 列将记录按降序排列。因此,薪水较高的员工将在输出中排在最前面。

排序前(emp5 表)

idnamesalary
1ratan9000
2karan40000
3jai90000

排序后(ORDER BY salary DESC)

idnamesalary
3jai90000
2karan40000
1ratan9000

MySQLi 面向对象方法

查询

示例

输出

<table>
<tr> <th> ID </th> <th> Name </th> </tr>
<tr> <td> 2 </td> <td> John Doe </td> </tr>
<tr> <td> 1 </td> <td> Jane Smith </td> </tr>
<tr> <td> 3 </td> <td> Robert Stone </td> </tr>
</table>

说明

这是一个使用 MySQLi 面向对象风格从 MyGuests 表检索数据,并按姓氏列升序排序的脚本。

排序前(MyGuests 表)

idfirstname姓氏
1JaneSmith
2JohnDoe
3Robert石头

排序后(ORDER BY lastname)

idfirstname姓氏
2JohnDoe
1JaneSmith
3Robert石头

PDO 中的 ORDER BY 子句

PDO 提供了更灵活、更安全的数据库事务处理技术。以下是如何使用 PDO 对数据进行排序的示例。

查询

示例

输出

2
John
Doe
1
Jane
Smith
3
Robert
Stone

说明

此示例演示了如何使用 PDO 和预处理语句获取并排序记录,按 lastname 列升序排序,并使用 RecursiveIteratorIterator 格式化输出。

排序前(MyGuests 表)

idfirstname姓氏
1JaneSmith
2JohnDoe
3Robert石头

排序后(ORDER BY lastname)

idfirstname姓氏
2JohnDoe
1JaneSmith
3Robert石头

ORDER BY 与 HTML 表输出

记录也可以显示为 HTML 表格,使结果更用户友好,尤其是在网页上。

查询

示例

输出

<table border='1'>
<tr> <th> ID </th> <th> First Name </th> <th> Last Name </th> <th> Email </th> </tr>
<tr> <td> 3 </td> <td> Alice </td> <td> Brown </td> <td> alice@tpointtech.com </td> </tr>
<tr> <td> 1 </td> <td> Bob </td> <td> White </td> <td> bob@tpointtech.com </td> </tr>
<tr> <td> 2 </td> <td> Prachet </td> <td> Black </td> <td> prachet@tpointtech.com </td> </tr>
</table>

说明

此脚本连接到数据库,从 persons 表中读取行,按 first_name 列排序,并将它们放入格式化的 HTML 表中。

排序前(persons 表)

idfirst_namelast_nameemail
1Bob白色bob@tpointtech.com
2Prachet黑色prachet@tpointtech.com
3Alice棕色alice@tpointtech.com

排序后(ORDER BY first_name)

idfirst_namelast_nameemail
3Alice棕色alice@tpointtech.com
1Bob白色bob@tpointtech.com
2Prachet黑色prachet@tpointtech.com

结论

ORDER BY 子句是 SQL 的一个重要组成部分,可以通过 MySQLi 或 PDO 轻松地集成到 PHP 应用程序中。它使开发人员能够按顺序检索数据,这对于报告、列表和仪表板非常重要。虽然 mysql_* 函数已过时,但存在访问数据库的最新、安全且通用的技术,即 MySQLi 和 PDO。在这些方法中使用 ORDER BY 可以为 Web 应用程序中的数据提供灵活且用户友好的呈现。


下一主题PHP面试题