存储使用|
分隔的字符串,其中列出了允许的组,现在我的问题是,如果我删除了一个组而不是从该特定字段中删除ID,例如
allowed_group_id
+---------------+
1332|4545|5646|7986
因此,例如我删除该组说没有5646,那么如何更改脚本并从脚本表中的allowed_group_id
中删除该特定组?
答案 0 :(得分:1)
你可以尝试这个 -
update table tableName set allowed_group_id = REPLACE(allowed_group_id, '5646', '');
答案 1 :(得分: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
希望有所帮助
答案 2 :(得分:1)
使用Suresh响应并改进它:
UPDATE TABLE tableName SET allowed_group_id = REPLACE(
REPLACE(allowed_group_id, '5646', ''),
'||',
'|');
首先,您在'5646'
中搜索allowed_group_id
字符串,并将其替换为空字符串''
。其次,只搜索结果'||'
中的两个条形'|'
。这样可以避免'1332|4545||7986'
中出现allowed_group_id
。
答案 3 :(得分: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 |
...
答案 4 :(得分:0)
或者您应该有一个包含2列1的表,其中包含您要允许的操作的ID以及具有组ID的ID。
答案 5 :(得分:0)
虽然其他答案将按原样解决您的问题:您可能需要考虑规范化您的数据库。
例如,如果您当前有一个包含table_name
和id
的表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
。
这称为将您的数据放入first normal form。