0

を使用して区切られた文字列を保存して|います。これは、許可されているグループを一覧表示します。たとえば、特定のフィールドからIDを削除できない場合よりも、グループを削除した場合に問題が発生します。

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

たとえば、グループを削除すると5646と言われますが、スクリプトを変更して、その特定のグループをallowed_group_idinscriptテーブルから削除するにはどうすればよいですか。

4

6 に答える 6

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 に答える
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を検索しallowed_group_id、それを空の string に置き換えます''。次に、結果から 2 本の棒を検索して、'||'1 本の棒のみに置き換えます'|'。これ'1332|4545||7986'により、allowed_group_id.

于 2013-01-15T12:07:05.183 に答える
0

他の回答は問題をそのまま解決しますが、データベースの正規化を検討することをお勧めします。

たとえば、現在 とをtable_name含むテーブルがある場合、許可されたグループごとに複数の行を含む新しいテーブルを作成します。idallowed_group_idallowed_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

これは、データを第 1 正規形にすることと呼ばれます。

于 2013-01-15T12:09:56.207 に答える
0

または、許可するアクションの ID を持つ 1 列とグループの ID を持つ 1 列の 2 つの列を持つテーブルが必要です。

于 2013-01-15T12:06:15.047 に答える