我正在存储一个使用 分隔的字符串|
,其中列出了允许的组,现在我的问题是,如果我删除一个组而不是我无法从该特定字段中删除 ID,例如
allowed_group_id
+---------------+
1332|4545|5646|7986
例如,我正在删除组说不 5646,那么如何更改脚本并从allowed_group_id
脚本表中删除该特定组?
你可以试试这个-
update table tableName set allowed_group_id = REPLACE(allowed_group_id, '5646', '');
我建议获取条目,用“|”分解它,删除适当的条目,将其重新分解并更新。
$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
希望能帮助到你
使用 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
.
使用爆炸:
$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 |
...
或者您应该有一个包含 2 列 1 的表,其中包含您要允许的操作的 id 和一个具有组 id 的表。
虽然其他答案将按原样解决您的问题:您可能需要考虑规范化您的数据库。
例如,如果您当前有一个table_name
包含id
and的表,那么您将为每个允许的组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
。
这称为将您的数据置于第一范式。