0

シリアル化されたデータを使用している行を持つ 2000 個の製品があり、特定の文字列を更新する必要があります

これは行名データです

a:35:{s:11:"expire_days";s:3:"30d";s:12:"trial1_price";s:0:"";s:11:"trial1_days";s:0:"";s:12:"is_recurring";s:0:"";s:10:"start_date";s:0:"";s:5:"terms";s:24:"$150 for 1 Per license";s:12:"rebill_times";s:0:"";s:15:"paypal_currency";s:0:"";s:4:"##11";N;s:3:"url";s:0:"";s:8:"add_urls";s:0:"";s:4:"##12";N;s:5:"scope";s:0:"";s:5:"order";s:4:"1010";s:11:"price_group";s:1:"7";s:13:"renewal_group";s:2:"28";s:14:"need_agreement";s:0:"";s:13:"require_other";a:1:{i:0;s:0:"";}s:16:"prevent_if_other";N;s:4:"##13";N;s:19:"autoresponder_renew";s:0:"";s:16:"dont_mail_expire";s:0:"";s:13:"joomla_access";s:2:"36";s:10:"files_path";s:108:"products/Boxes8.zip|Box 8
products/Boxes9.zip|Box 9";s:14:"download_count";s:0:"";s:18:"download_unlimited";}

変更する必要があるのは
s:24:" 1 ライセンスにつき 150 ドル";

どんな助けでも大歓迎です。

4

2 に答える 2

1

おそらくSELECT行を作成し、変更を加えてからUPDATE、新しい値を使用する必要があります。このデータベース側で行う必要がある場合は、この質問への回答が役立つ場合があります。

MySQLで正規表現を置き換える方法は?

于 2012-08-11T17:50:42.443 に答える
0

その単一フィールドの値を別のものに置き換えたい場合は、次のクエリを使用できます。

UPDATE table SET col = CONCAT(
  LEFT(col, LOCATE('s:24:"', col) + 5),                  -- up to and including the opening quote
  'Now for free',                                        -- new replacement text
  SUBSTR(col, LOCATE('"', col, LOCATE('s:24:"', col)+6)) -- closing quote and everything after that
) WHERE col LIKE '%s:24:"$150 for 1 Per license"%'

問題が発生する可能性があることに注意してください。フィールドのいずれかの値が で終わる必要がある場合's:24:'、それを終了引用符と組み合わせると、見ている場所として誤解される可能性があります。このリスクはほとんどないと思いますが、安全にプレイしたい場合は、引用符で囲まれた文字列とエスケープされた引用符を処理できる精巧な正規表現を使用してチェックすることをお勧めします。

于 2012-08-11T18:15:53.343 に答える