从数据库字段中删除特定ID

时间:2013-01-15 11:59:05

标签: php mysql

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

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

因此,例如我删除该组说没有5646,那么如何更改脚本并从脚本表中的allowed_group_id中删除该特定组?

6 个答案:

答案 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_nameid的表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