데이터의 조건을 설정하여 데이터를 수정하는 방법 이외에 데이터를 정렬 후에 LIMIT를 통하여 데이터를 수정할 수 있습니다.

즉, 데이터를 수정할 때는 수정하는 데이터의 범위를 지정하는 것이 중요합니다. 프라이머리 키 Id와 같이 데이터를 1개만 지정할 수도 있고 그룹 등 다양한 방법으로 범위를 지정할 수도 있습니다.

17.3.1 쿼리 실습

다음은 주문 테이블을 프라이머리 키로 정렬하여 상위 2개의 데이터만 수정합니다.

| 예제 쿼리 |

update members set manager='info' order by Id desc limit 2; 

| 콘솔 실습 화면 |

mysql> update members set manager='info' order by Id desc limit 2;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from members;
+----+----------+-----------+-------------+-------+---------+-----------+
| Id | LastName | FirstName | Address     | City  | Country | manager   |
+----+----------+-----------+-------------+-------+---------+-----------+
|  1 | hojin    | lee       | shinchon    | seoul | korea   | infohojin |
|  2 | jiny     | NULL      | NULL        | NULL  | korea   | infohojin |
|  3 | james    | kim       | youngdun-po | seoul | korea   | info      |
|  4 | eric     | jung      | seocho-gu   | busan | korea   | info      |
+----+----------+-----------+-------------+-------+---------+-----------+
4 rows in set (0.00 sec)

17.3.2 PHP 실습

PHP 코드를 통하여 실습해 봅니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 최상의 데이터 몇개만 업데이트합니다.
public function updateLimit($tbname, $arr, $num, $orderby)
{
            if ($tbname){
                if($num){

                    $queryString = $this->arrQueryUpdate($tbname, $arr);

                    if ($orderby){
                        $queryString .= " ORDER BY $orderby LIMIT $num";
                    } else {
                        $queryString .= " $tbname LIMIT $num"; 
                    }
                    

                    // 쿼리를 전송합니다.
                    if (mysqli_query($this->dbcon, $queryString)=== TRUE){
                        $this->msgEcho("쿼리성공] ".$queryString);
                        $this->msgEcho(" 데이터 업데이트!");

                        // 객체 반환, 매서드체인
                        return $this; 

                    } else {
                        $this->msgEcho("Error] ".$queryString);
                    }

                } else {
                    $this->msgEcho("Error] 업데이트할 테이터 갯수가 없습니다."); 
                }

            } else {
                $this->msgEcho("Error] 테이블 이름이 없습니다."); 
            }
}

예제 파일 | update-04.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	$tbname = "members";
	$arr = array('Country' => 'Korea');

	// 최상위 데이터 2개만 갱신합니다.
	$db->updateLimit($tbname, $arr, 2);

	// LastName 정렬후에 데이터 2개만 갱신합니다.
	$db->updateLimit($tbname, $arr, 2, "LastName desc");
?>

화면 출력

mysql connected!
Country
Error] UPDATE members SET `Country`='Korea' members LIMIT 2
Country
쿼리성공] UPDATE members SET `Country`='Korea' ORDER BY LastName desc LIMIT 2
데이터 업데이트!