2016-06-25 14 views
0

我想在短語在數據庫中添加數據庫SQL值增加值+1我省phrasr這樣在詞組數量

DO-2500-01 
DO-2500-02 

現在我的問題是如何在最後的附加價值+1這樣DO-2500-03/DO-2500-04 這是我的代碼

$getse = $DB_con->prepare("SELECT serial FROM `customer` WHERE user_add=:id ORDER BY serial DESC LIMIT 1"); 
$getse->execute(array(":id"=>$user_id));     
$getse = $getse->fetch(PDO::FETCH_OBJ); 
$addone = $getse->serial + 1; 
echo $addone; 

這是我的代碼,我得到最後的串行和我想添加+1例如,在數據庫中最後一個串口是DO-2500-04我想這個比例並增加+1變成這個樣子DO-2500-05

+1

有幾種方法可以做到這一點。 'DO-2500-99'發生了什麼? – Tigger

+0

如果串行是DO-2500-99會發生什麼,那麼您是否想要DO-2501-00正確? – Manish

+0

at DO-2500-99我想成爲DO-2500-100 –

回答

2

分割字符串,增加最後一部分,結合回

$addone = explode('-', "DO-2500-04"); 
$addone[count($addone)-1] += 1; 
// Append 0 if the last part less then 10 
$addone[count($addone)-1] = str_pad($addone[count($addone)-1], 2, 0, STR_PAD_LEFT); 
echo $addone = implode('-', $addone); 
+0

您不需要爆炸時需要'+ 1'。 –

+0

@ChinLeung謝謝 – splash58

+0

請檢查tigger的評論 –

0

DO-2500-04這是一個字符串值,你不能用它的算術運算符。如果你只是想讓最後一個計數器增加,你需要做的是通過分割字符串-得到最後一個值。

然後得到最後一個值並遞增,然後再加入-

要拆分和加入陣列,我們可以使用explode()implode()

這是如何使用爆炸()

$values=explode("-","DO-2500-04"); // $values is now array. 
$lastvalue=(int)$values[2]; 
$lastvalue++; 
if($lastvalue<9) { 
    $lastvalue = "0" . $lastvalue; 
} 
$values[2]=$lastvalue; 
$incremented_string=implode("-",$values); 

在第一個參數爆炸表示chracter通過要分割字符串一樣第一個參數破滅表示得到的字符串的最後一個值你想要加入數組。

http://php.net/manual/en/function.explode.php

http://php.net/manual/en/function.implode.php

+0

不,我只是想爲最後一個值+1我不想要更改2500的值甚至數量變成99我想添加1 DO-2500-100 此代碼適用於飛濺工作罰款: $ addone = explode(' - ',$ getse-> serial); $ addone [count($ addone)-1] + = 1; echo $ addone = implode(' - ',$ addone); 爲什麼刪除? –

+0

感謝您的幫助@Alok –

+0

是的,代碼不會更新2500值@WilianBrain它只是更新了最後一個值計數器。 –

0

只是爲了好玩,你可以做很多這像SQL:

$getse = $DB_con->prepare("SELECT serial, 
    LEFT(serial,8) AS serialBase, 
    SUBSTRING(serial,8) AS serialIdx 
    FROM `customer` WHERE user_add=:id 
    ORDER BY serial DESC LIMIT 1"); 
$getse->execute(array(":id"=>$user_id));     
$getse = $getse->fetch(PDO::FETCH_OBJ); 
$addone = $getse->serialBase + str_pad(($getse->serialIdx + 1),2,'0',STR_PAD_LEFT); 
echo $addone; 

更新了SQL。

+0

不,我只是想爲最後一個值+1我不想更改2500的值甚至數量變成99我想補充1 DO-2500-100 這個代碼爲@splash工作正常: $ addone = explode (' - ',$ getse-> serial); $ addone [count($ addone)-1] + = 1; echo $ addone = implode(' - ',$ addone); 爲什麼刪除? –

+0

@Tigger先生我有一個問題,如果我想獲得這個代碼的最後一個號碼DO-2500-99我想得到的只是號碼99請問怎麼辦? –

+0

這將是'$ getse-> serialIdx'的值。 – Tigger

1

您可以根據您的要求得到它。

如果DO-2500-99應該是DO-2501-00那麼下面的代碼可以工作。

$serialArr= explode('-', $getse->serial); 
$serialNo = (int)$serialArr [1].$serialArr [2]; 
$newSerialNo = $serialNo + 1; 
$newSerialNo = substr($newSerialNo, 0, -2)."-".substr($newSerialNo , -2); 
$newSerial = $serialArr[0].'-'.$newSerialNo; 

如果DO-2500-99應該是DO-2500-100,那麼下面的代碼可以工作。

$getse = 'DO-2500-99'; 
$serialArr= explode('-', $getse->serial); 
$serialNo = (int)$serialArr [2]; 
$serialArr[2] = $serialNo + 1; 
$newSerial = implode('-',$serialArr); 
+0

謝謝你@Manish的代碼工作正常,也感謝我有一個問題,如果我想獲得這個代碼的最後一個號碼DO-2500-99我想得到的只是99號這怎麼能? –

+0

@WilianBrain'$ serialArr = explode(' - ',$ getse-> serial); $ serialNo =(int)$ serialArr [2];'只是使用這個語句,你可以得到99. – Manish

+0

我在哪裏通過這個代碼? '$ getse-> serial'這個變量後的 –