2

'column1'列に構造の複数のレコードがあり、同じ列のタイプを更新したいと思います。

これらのフィールドには、1つのフィールドにのみ、言語、カテゴリレベル、および名前に関する情報が含まれています。

情報は、次のように記号で区切られています。

  1. ":"(2点)言語をルートで区切る(言語%:トップ/%)
  2. ルート(Top / level_1)をカテゴリで区切り、category(level_1 / level_2)を別のレベルのカテゴリで区切る "/"(スラッシュ)。
  3. したがって、FIELDの形式は「language:Top / level/level」になります。

FIELDSに格納されている情報は、2つの異なるソースから取得されます。1つは内部ソースであり、root(Top /)のないもう1つのFIELDSは外部ソースから取得され、SQLで更新する必要があります。

実際のフィールド例:

< b>英語< / b>:level / Test / later

< b>英語< / b&gt ;: Top / level / Test / later

実際のテーブルの例:

**before**                                           **after**
language0:Top/level_0/name_category                  language0:Top/level_1/name_category
language1:name_test2/name_category                   language1:name_test2/name_category
language2:level_1/name_category                      language2:Top/level_1/level_2/name_category
language3:level_1/level_2/name_category              language3:Top/level_1/level_2/name_category
language4:level_1/level_2/level_3/name_category      language4:Top/level_1/level_2/level_3/name_category

最初の行はすでに変更されているため、「language%:level_1 /%」で始まるレコードのみを選択する必要があります

table_example1

id    **column1**                       

1    language0:Top/level_1/level_2/level_3/level_4
2    language1:name_test2/etc/
3    language2:level_1/level_2/level_3/level_4
4    language3:level_1/level_2/level_3
5    language3:level_1/level_2
6    language%:level_1/

ノート:

  • この例では、次のフィールドのみを更新する必要があります。行ID 3,4,5,6、およびテーブルのcolumn1のみ
  • 結果は、行ID 1column1のようになる必要がありますlanguage0:Top/name_test/etc/etc/
  • language1:name_test2/etc/行ID2column1のフィールドは無視され、異なる形式と格納された異なる情報です。
  • 2行目を変更しない理由はリンク値が異なります:name_test2(name_test)LIKE'name_test /%'のみ
  • この#記号がフィールドに存在しないのは、列の前、列の後に表示されることを示すためだけです。
  • FIELDは、次の2つのポイント(:)の後に、式の後にスラッシュ(level_1 /)が続く場合にのみ更新する必要があります。

それ以外の方法で開始する他のレコードは変更しないでください。

これどうやってするの?

4

1 に答える 1

1
UPDATE `table_example1` SET `column1` = REPLACE(column1,':name_test/',':Top/name_test/');

このクエリを使用する前に、バックアップを作成してください。

于 2012-10-21T17:58:37.673 に答える