0

データベース内の私のテーブル構造。

テーブル「System_t」

id         |    Owner     |    System
===========================================
1          |    Joe       |    Registration
           |              |    Event             //contains new line
           |              |    Aims
-------------------------------------------
2          |    Rose      |    Ticket
           |              |    Elearning

注:データフィールド「システム」は、テキストエリアボックスから保存されました。

私の問題は、フィールド「システム」から「イベント」データのみを削除するにはどうすればよいですか?

削除すると、テーブルは次のようになります。

id         |    Owner     |    System
===========================================
1          |    Joe       |    Registration
           |              |    Aims
-------------------------------------------
2          |    Rose      |    Ticket
           |              |    Elearning 

テーブル構造を変更せずにそれを行う方法はありますか?

4

6 に答える 6

5

この場合、aをUPDATE含むステートメントのREPLACE方が適切です。

この投稿を見てください、それはあなたが私が話していることを理解するのを助けるかもしれません:

MYSQLで文字列の一部を削除する

于 2012-06-15T09:16:46.917 に答える
0
$searchQuery = "Event";

$query = mysql_query("SELECT `id`, `System` FROM `System_t` WHERE `System` LIKE '%" . $searchQuery . "%'");

if (mysql_num_rows($query) > 0) {
    while ($arr = mysql_fetch_row($query)) {
        $system = explode("\n", $arr[1]);
        $key = array_search($searchQuery, $system);
        if ($key !== false)
            unset($system[$key]);

        $system = implode("\n", $system);

        mysql_query("UPDATE `System_t` SET `System`='" . $system . "' WHERE `id`='" . $arr[0] . "'");
    }
}
于 2012-06-15T09:16:00.577 に答える
0

PostgreSQL の場合、次のようなものを使用できます (MySQL のような直接置換機能はないと思うため)。

UPDATE "System_t"
SET "System" = overlay("System" placing '' 
               from (position('Events' in "System")) 
               for 6)
WHERE "System" LIKE '%Events%'

オーバーレイ関数と位置関数の説明は、http ://www.postgresql.org/docs/8.0/static/functions-string.html で確認できます。

6 は、削除する文字列のサイズです。

とにかく、たとえば、(id、system_id、system_type) を使用して別のテーブルを作成することをお勧めします。system_id は、他のテーブルに接続する外部キーです。そうすれば、より良いモデルが得られ、多くの矛盾を回避できます。

于 2012-06-15T10:11:08.800 に答える
0

これを試して:

 update System_t su
       set su.System = replace(su.System, "Event", "") 
        where su.System like "%Event%";

新しい行は考慮していません。これは簡単な演習として残します:)。

于 2012-06-15T09:23:21.237 に答える
0

deleteコマンドを使用して削除できます。

DELETE FROM table_name
WHERE some_column=some_value
于 2012-06-15T09:13:00.927 に答える
0
Update system_t SET system=REPLACE(system,'event','') WHERE system REGEXP '[[:<:]]event[[:>:]]';
于 2012-06-15T09:25:06.400 に答える