2

データベースが正規化されていないことはわかっていますが、私の場合、何かを変更して行を削除して挿入し直す必要があるたびに、各ユーザーがアクセス権を持つ異なるアクセスレベルを持っているため、データを正規化することはできません。コンマ区切りの値、ここでの問題は、特定のグループを削除すると、正規表現が機能せず、エラーがスローされることです..phpを使用していると、エラーは次のようになります

FUNCTION database_name.REGEXP_REPLACE does not exist

テーブル構造

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

私のクエリは、たとえば$delete_idis12345または say55454です。一度に 1 つの 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']}

それで、ここで何が問題なのですか?

4

1 に答える 1

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が削除され、二重になっているカンマが削除されてから、文字列の先頭/末尾にあるカンマが削除されます。これで十分ですが、必要に応じて別の置換を追加して空白を削除できます。

更新:SQLFiddleは実行中のクエリを表示します

于 2013-01-16T09:26:55.213 に答える