0

我正在存储一个使用 分隔的字符串|,其中列出了允许的组,现在我的问题是,如果我删除一个组而不是我无法从该特定字段中删除 ID,例如

allowed_group_id
+---------------+
1332|4545|5646|7986

例如,我正在删除组说不 5646,那么如何更改脚本并从allowed_group_id脚本表中删除该特定组?

4

6 回答 6

1

你可以试试这个-

update table tableName set allowed_group_id = REPLACE(allowed_group_id, '5646', '');
于 2013-01-15T12:01:39.163 回答
1

我建议获取条目,用“|”分解它,删除适当的条目,将其重新分解并更新。

$allowedGroupId = '1332|4545|5646|7986';
$parts = explode('|', $allowedGroupId);
if(($key = array_search($deleteGroup, $allowedGroupId)) !== false) {
    unset($allowedGroupId[$key]);
}

$update = " ... "; //update with the new imploded values

希望能帮助到你

于 2013-01-15T12:04:01.400 回答
1

使用 Suresh 响应并改进它:

UPDATE TABLE tableName SET allowed_group_id = REPLACE(
    REPLACE(allowed_group_id, '5646', ''),
    '||',
    '|');

首先,您搜索'5646'string inallowed_group_id并将其替换为空 string ''。其次,您'||'只用一个 bar 从结果中搜索并替换两个 bar '|'。这将避免'1332|4545||7986'在您的allowed_group_id.

于 2013-01-15T12:07:05.183 回答
1

使用爆炸:

$allowed_ids = explode('|', $current_allowed_group_ids);
if($remove_key = array_search($remove_id, $allowed_ids) !== false) {
    unset($allowed_ids[$remove_key]);
}
$update_query = 'UPDATE table_name SET allowed_group_id = "'. implode('|', $allowed_ids) .'" WHERE id= ...';

但是你可能想稍微改变你的数据库设计,创建一个数据透视表来检查允许的 id。例子:

+------------+
|   GROUPS   |
+----+-------+
| id | name  |
+----+-------+
| 1  | grp_1 |
| 2  | grp_2 |
  ...

+--------------------+
|   ALLOWED_GROUPS   |
+--------------------+
| user_id | group_id |
+---------+----------+
|   2     |    1     |
|   2     |    2     |
|   5     |    2     |
   ...
于 2013-01-15T12:10:50.867 回答
0

或者您应该有一个包含 2 列 1 的表,其中包含您要允许的操作的 id 和一个具有组 id 的表。

于 2013-01-15T12:06:15.047 回答
0

虽然其他答案将按原样解决您的问题:您可能需要考虑规范化您的数据库。

例如,如果您当前有一个table_name包含idand的表,那么您将为每个允许的组allowed_group_id创建一个包含多行的新表:allowed_group

foreign_id | group_id
-----------+---------
1          | 1332
1          | 4545
1          | 5646
1          | 7986

...等等。这里,foreign_id是现有table_name表中行的 ID。现在,您可以简单地代替上述问题DELETE FROM allowed_group WHERE foreign_id = 1 AND groupId = 5646

这称为将您的数据置于第一范式

于 2013-01-15T12:09:56.207 回答