2013-01-16 43 views
2

好吧我知道我的數據庫沒有正常化,但在我的情況下,不可能規範化數據,因爲每個用戶具有不同的訪問級別和訪問權限,每次我修改某些內容我需要刪除行並插回,所以我去逗號分隔的值,這裏的問題是,如果我刪除一個特定的組,正則表達式不起作用,它會引發一個錯誤..使用PHP和錯誤這REGEX不能用於替換逗號分隔的id的mysql

FUNCTION database_name.REGEXP_REPLACE does not exist 

表結構

allowed_group_ids 
+----------------+ 
12345,34345,55454 

我的曲ERY,比方說$delete_id12345或者說55454,我一次只通過一個ID和ID的之間有沒有空間,這是一個文本字段

UPDATE tbl_scripts SET allowed_group_ids = TRIM(BOTH ',' 
FROM REGEXP_REPLACE(allowed_group_ids, '(,(\s)?)?$detele_id', '')) 
WHERE system_id = {$_SESSION['system_id']} 

那麼在這裏是怎麼回事?

+0

W.r.t. php錯誤,你應該調用REGEXP_REPLACE而不使用數據庫名稱,或者查看你的函數是否具有不同的名稱。 –

+0

@ Mr.Radical你在哪裏可以看到db名字? –

+0

你的錯誤是「database_name.REGEXP_REPLACE」。你有點database_name之前。我認爲你的函數被稱爲「REGEXP_REPLACE」而不是「database_name.REGEXP_REPLACE」。 –

回答

0

在MySQL中沒有regexp_replace這樣的事情。

你可以使用常規執行此查詢代替:

UPDATE tbl_scripts SET allowed_group_ids = 
    trim(BOTH ',' FROM 
     replace(
      replace(allowed_group_ids, '$delete_id',','), 
      ',,', 
      ',' 
     ) 
    ) 
WHERE system_id = {$_SESSION['system_id']} 

這首先刪除ID,並刪除任何一倍,達到逗號,然後在字符串的開始/結束刪除任何逗號。這應該足夠了,但如果需要,您可以添加另一個替換以刪除空格。

更新:SQL Fiddle顯示查詢在行動

+0

我假設他已經創建了自己的函數,名爲REGEXP_REPLACE –

+0

那麼,你知道他們對假設的看法...... :) – dwurf

+0

@dwurf我正在使用這個函數,但採用不同的方式'UPDATE tbl_scripts SET allowed_group_ids = REPLACE(REPLACE(allowed_group_ids ,'$ detele_group_id',''),',$ detele_group_id','')',這很好嗎? –