2011-11-17 54 views
0

我有我的表中的某些列,描述列包含的一些信息等;需要MySQL數據庫manupilation PHP正則表達式模式

a1b01,Value 1,2,1,60|a1b01,Value2,1,1,50|b203c,Value 1,0,2,20 

用SQL命令,我需要更新它。

在那裏,我將使用一個PHP函數用於更新,如果在當前記錄存在的第一和第二參數(在說明列)一起使用。

例如:如果用戶想改變的描述,其中包括價值a1b01,Value 1我會執行這樣一個SQL命令;

function do_action ($code,$value,$new1,$new2,$newresult) { 
UPDATE the_table SET descriptions = REPLACE(descriptions, $code.','.$value.'*', $code.','.$value.','.$new1.','.$new2.','.$newresult)"; 
} 
  • (星)表明,這些部分是未知的(這就是爲什麼我需要一個正則表達式)

我的問題是:我怎樣才能得到

a1b01,Value 1,2,1,60| 

部分從下面串

a1b01,Value 1,2,1,60|a1b01,Value2,1,1,50|b203c,Value 1,0,2,20 

通過正則表達式,但a1b01Value 1應該得到儘可能的參數。

我只想說;當我打電話do_action那樣;

do_action ("a1b01","Value 1",2,3,25); 

記錄將是:a1b01,Value 1,2,3,25|a1b01,Value2,1,1,50|b203c,Value 1,0,2,20
第一部分更新中...

+0

你爲什麼要在RDBMS中存儲序列化的值?閱讀:http://stackoverflow.com/questions/7364803/storing-arrays-in-the-database/7364834#7364834。如果你的桌子設計正確,你就不會有這個問題。 – NullUserException

回答

1

你不一定需要使用正則表達式來做到這一點,你可以使用explode功能,因爲它是所有分隔

所以,你可以做如下:

$descriptionArray = explode('|', $descriptions); //creates array of the a1b01,Value 1,2,1,60 block 
//then for each description explode on , 
for($i = 0; i < count($descriptionArray); $i++){ 
    $parameters = explode(',', $descriptionArray[$i]); 
    do_action ($parameters[0],$parameters[1],$parameters[2],$parameters[3],$parameters[4]); 
} 
+0

我正要書寫相同的代碼塊,榮譽 - 最高票 –

+0

你可能只是不做循環,使之'$ descriptionArray [0]'如果不需要的話,我理解修訂後的邏輯;) –