데이터의 조건을 설정하여 데이터를 수정하는 방법 이외에 데이터를 정렬 후에 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
데이터 업데이트!