mysql의 감소 값이지만 음수는 아닙니다.
사용자가 php 및 mysql에서 값을 삭제할 때 값을 줄이고 싶습니다.0보다 아래로 내려가지 않도록 체크하고 싶습니다.값이 0인 경우 감소하지 마십시오.
mysql_query("UPDATE table SET field = field - 1 WHERE id = $number");
필드가 0인 경우 아무것도 수행하지 마십시오.
갱신할 다른 조건을 추가하는 것은, 다음의 경우 뿐입니다.field
더 크다0
UPDATE table
SET field = field - 1
WHERE id = $number
and field > 0
를 사용하면 새로운 값이 0 아래로 떨어지는 것을 방지할 수 있습니다.값이 0 아래로 떨어지면 0은 항상 계산된 값보다 커지므로 0보다 작은 값은 사용할 수 없습니다.
UPDATE table
SET field = GREATEST(0, field - 1)
WHERE id = $number
그리고 한 가지 덧붙이자면, 제발 사용하지 말아주세요.mysql_*
더 이상 기능하지 않습니다.이러한 파일은 더 이상 사용되지 않으며 PHP에서 제거됩니다.대신 PDO 또는 MySQLi를 사용하십시오.
GREATE를 사용하는 옵션은 새로운 MySQL 버전에서는 사용할 수 없으며, 하나의 필드가 아닌 여러 개의 필드를 업데이트하려는 경우 허용되는 답변이 유용하지 않을 수 있습니다.이 문제에 대한 해결책은 IF를 사용하는 것입니다.
UPDATE table
SET field = IF(field > 0, field - 1, 0)
WHERE id = $number
UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number
UPDATE `table_name` SET field = field-1 WHERE `id` = '".$id."' AND field > 0
참고: 필드의 데이터 유형은 INTEGER여야 합니다.
필드가 부호 없이 입력되어 있는 경우는, 이하가 최적입니다.
UPDATE table
SET field = field - 1
WHERE id = $number
and field > 0
# or
UPDATE table
SET field = IF(field > 0, field - 1, 0)
WHERE id = $number
PDO로 예시를 빠르게 검색하는 사용자에게는...
<?php
/**
* Class Set_quantity_product
*/
class Set_quantity_product {
/**
* Set_quantity_product::update_quant_prod( $id, $number, $to_do );
*
* @param {int} $id a product id
* @param {int} $number a number to increment or decrement for a value in DB
* @param {str} $to_do 'incr/decr'
* @return {void} increment or decrement but always return 0 if quant < 0
*/
public static function update_quant_prod( $id, $number, $to_do ){
$DATA_BASE = new PDO('mysql:host='.$YOUR_HOST.';dbname='.$YOUR_DB_NAME.';charset=utf8', $YOUR_USER_NAME, $YOUR_DB_PASSWORD, array( PDO::ATTR_PERSISTENT => false));
// Note:
// UPDATE products
// SET quant = GREATEST( 0, quant+:ope )
// WHERE id = :id
// increm or decrement but do nothing if quant is > quant in DB
// pass quant number to affect to negative for decrement
$number = ( $to_do == 'decr' ) ? $number*-1 : $number;
// UPDATE ONE PROD. QUANT. 'ope' -> calcul operation
$ARR_pdo = array( 'id' => (int) $id,
'ope' => $number );
$sql = 'UPDATE products SET
quant = IF(quant+:ope >= 0, quant+:ope, 0) WHERE id=:id';
// prepa. SQL
$request = $DATA_BASE->prepare($sql);
// exec. request
$request->execute($ARR_pdo);
// PDO closeCursor
$request->closeCursor();
// return true for test
return true;
}
/**
* Set_quantity_product::update_quant_prod( $id, $number, $to_do );
*/
}
/**
* Class Set_quantity_product
*/
?>
사용방법: (ID=42인 제품이 있다고 가정합니다.)
Set_quantity_product::update_quant_prod( 42, 5, 'decr' );
DB의 수량이 6 ->일 경우 값을 1로 설정합니다.
DB의 수량이 5인 경우 -> 이 값을 0으로 설정합니다.
DB의 수량이 4인 경우 -> 이 값을 0으로 설정합니다.
언급URL : https://stackoverflow.com/questions/16277339/decrement-value-in-mysql-but-not-negative
'programing' 카테고리의 다른 글
자바 웹사이트는 어떻게 만들어요? (0) | 2023.02.04 |
---|---|
이클립스 커서가 십자선으로 변경됨 (0) | 2023.02.04 |
brew install mysql on macOS (0) | 2023.02.04 |
Larabel 5 show ErrorException file_put_contents가 스트림을 열지 못했습니다.해당 파일 또는 디렉터리가 없습니다. (0) | 2023.02.04 |
Java FileReader 인코딩 문제 (0) | 2023.02.04 |