English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 기본 튜토리얼

PHP 고급 튜토리얼

PHP & MySQL

PHP 참조 매뉴얼

PHP MySQL ORDER BY

이 튜토리얼에서는 PHP를 사용하여 MySQL 테이블의 데이터를 오름차순 또는 내림차순으로 정렬하고 표시하는 방법을 배울 것입니다.

결과 집합 정렬

ORDER BY절과 함께 사용할 수 있습니다:SELECT문장을 결합하여 특정 필드에 따라 정렬된 테이블의 데이터를 확인할 수 있습니다. ORDER BY 절은 정렬 기준 필드 이름과 정렬 방향(오름차순 또는 내림차순)을 정의할 수 있습니다.

이 절의 기본 문법은 다음과 같이 제공됩니다:

SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC

SELECT 문의 ORDER BY 절을 사용하여 SQL 쿼리를 수행하여, 이를 PHP mysqli_query() 함수에 전달하여 정렬된 데이터를 얻을 수 있습니다. 다음과 같은 persons 테이블이 있는 데모 데이터베이스를 고려해 보겠습니다:

+----+------------+-----------+----------------------+
| id | first_name | last_name | email              |
+----+------------+-----------+----------------------+
|  1 | Peter      | Parker    | [email protected] |
|  2 | John       | Rambo     | [email protected]   |
|  3 | Clark      | Kent      | [email protected]   |
|  4 | John       | Carter    | [email protected]  |
|  5 | Harry      | Potter    | [email protected] |
+----+------------+-----------+----------------------+

아래 예제의 PHP 코드는 persons 테이블에서 모든 행을 선택합니다:first_name결과를 알파벳 순으로 정렬합니다.

예제: 절차적 방식

<?php
/* MySQL 서버 연결 시도. MySQL을 실행 중인 것으로 가정합니다.
기본 설정된 서버(비밀번호 없는 사용자 "root") */
$link = mysqli_connect("localhost", "root", "", "demo");
 
//연결 확인
if($link === false){
    die("에러: 연결할 수 없음. ". mysqli_connect_error());
}
 
//ORDER BY 절을 사용하여 SELECT 쿼리 실행 시도
$sql = "SELECT * FROM persons ORDER BY first_name";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<th>first_name<
            echo "<td>" . $row['first_name'] . "<
                echo "<th>last_name</>fetch()){
                echo "<th>email</>fetch()){
                th>";/>fetch()){
                while($row = $result/>fetch()){
            결과 집합을 해제합니다/table>";
        while($row = mysqli_fetch_array($result)){
            echo "<td>" . $row['first_name'] . "<
                echo "<td>" . $row['last_name'] . "</echo "<
                echo "<td>" . $row['email'] . "</echo "<
                td>";/echo "<
                tr>";/echo "<
            결과 집합을 해제합니다/table>";
        }
        결과 집합을 해제합니다/unset($result);
        //결과 집합을 닫습니다
        mysqli_free_result($result);
    echo "존재하지 않는 기록이 있습니다.";
        catch(PDOException $e){
    }
echo "존재하지 않는 기록이 있습니다.";
    echo "에러: 실행할 수 없음. ". mysqli_error($link);
}
 
//연결을 종료합니다
mysqli_close($link);
?>

예제: 객체 지향 방식

<?php
/* MySQL 서버 연결 시도. MySQL을 실행 중인 것으로 가정합니다.
기본 설정된 서버(비밀번호 없는 사용자 "root") */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//연결 확인
if($mysqli === false){
    die("에러: 연결할 수 없음. ". $mysqli->connect_error);
}
 
//시도하여 SELECT 쿼리 실행을 ORDER BY 문으로 선택
$sql = "SELECT * FROM persons ORDER BY first_name";
if($result = $mysqli->query($sql)){
    echo "<table>";->num_rows > 0){
        echo "<th>first_name<
            echo "<td>" . $row['first_name'] . "<
                echo "<th>last_name</>fetch()){
                echo "<th>email</>fetch()){
                th>";/>fetch()){
                while($row = $result/>fetch()){
            결과 집합을 해제합니다/table>";
        echo "<tr>";->fetch_array()){
            echo "<td>" . $row['first_name'] . "<
                echo "<td>" . $row['last_name'] . "</echo "<
                echo "<td>" . $row['email'] . "</echo "<
                td>";/echo "<
                tr>";/echo "<
            결과 집합을 해제합니다/table>";
        }
        결과 집합을 해제합니다/unset($result);
        // else{
        $result->free();
    echo "존재하지 않는 기록이 있습니다.";
        catch(PDOException $e){
    }
echo "존재하지 않는 기록이 있습니다.";
    echo "에러: 실행할 수 없음. ". $mysqli->error;
}
 
//연결을 종료합니다
$mysqli->close();
?>

예제: PDO 방식

<?php
/* MySQL 서버 연결 시도. MySQL을 실행 중인 것으로 가정합니다.
기본 설정된 서버(비밀번호 없는 사용자 "root") */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ");
    //PDO 오류 모드를 예외로 설정합니다
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
    die("에러: 연결할 수 없음. ". $e->getMessage());
}
 
//시도하여 쿼리 실행 선택
try{
    $sql = "SELECT * FROM persons ORDER BY first_name";
    if($result->rowCount() > 0){
    echo "<table>";-echo "<th>id<
        echo "<th>first_name<
            echo "<td>" . $row['first_name'] . "<
                echo "<th>last_name</>fetch()){
                echo "<th>email</>fetch()){
                th>";/>fetch()){
                while($row = $result/>fetch()){
            결과 집합을 해제합니다/table>";
        echo "<tr>";-echo "<td>" . $row['id'] . "<
            echo "<td>" . $row['first_name'] . "<
                echo "<td>" . $row['last_name'] . "</echo "<
                echo "<td>" . $row['email'] . "</echo "<
                td>";/echo "<
                tr>";/echo "<
            결과 집합을 해제합니다/table>";
        }
        결과 집합을 해제합니다/unset($result);
        //else{
        }
    echo "존재하지 않는 기록이 있습니다.";
        catch(PDOException $e){
    }
}
    die("에러: $sql을 실행할 수 없습니다. ": $e);->getMessage());
}
 
//연결을 종료합니다
unset($pdo);
?>

결과를 정렬한 후, 결과 집합은 다음과 같습니다:

+----+------------+-----------+----------------------+
| id | first_name | last_name | email              |
+----+------------+-----------+----------------------+
|  3 | Clark      | Kent      | [email protected]   |
|  5 | Harry      | Potter    | [email protected] |
|  2 | John       | Rambo     | [email protected]   |
|  4 | John       | Carter    | [email protected]  |
|  1 | Peter      | Parker    | [email protected] |
+----+------------+-----------+----------------------+

안내:기본적으로 ORDER BY 절은 결과를 오름차순으로 정렬합니다. 기록을 내림차순으로 정렬하려면 DESC 키워드를 사용할 수 있습니다.