- 締切済み
データの一部をコピーして別のカラムへペースト
php文でDBにある全てのデータの一部(指定範囲)をコピーして 別のカラムにペーストしたいです。 テーブルの状態 ID URL /AAA/CB0199/top/ /AAA/001229/top/ /AAA/001001/top/ 例えば コピーしたい範囲は /AAA/コピーしたい範囲/top/ です。 ここをコピーしてIDのカラムにペーストしたいです。 実現結果 テーブルの状態 ID URL CB0199 /AAA/CB0199/top/ 001229 /AAA/001229/top/ 001001 /AAA/001001/top/ 上記のようになるのが希望です。 PHP上での記述方法を教えていただきたくよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
ん、単純にyambejpさんの記述されている update hoge set ID=replace(replace(URL,'/AAA/',''),'/top/',''); だけ実行すれば良いのでは。yambejpさんの書いた、createt tableとinsertは、テストデータ作るための記述ってだけですよね? テーブルに含まれている全レコードのURLが全て/AAA/と/top/を含んでいるのであればそのUPDATE文を一つ投げれば終わると思いますが何か別の意図があるんでしょうか。
- yambejp
- ベストアンサー率51% (3827/7415)
>PHP文から処理したい そうなると (1)SQLから(?)データをとりだす (2)PHPでデータを加工する (3)SQLでデータを更新(修正)する という3つの作業が必要になります (1)ではデータを一時的に配列に全部入れておくのがよいでしょう (2)では配列をforeachで走査しながら(3)でupdate文を発行します 非常に非効率ですがまぁ何か意図があるとは思うので、そうしたければ どうぞの世界・・・
- yambejp
- ベストアンサー率51% (3827/7415)
「/AAA/」と「/top/」が確実ならSQL側で処理できるのでは? たとえばMySQLならこんな感じ create table hoge(ID varchar(30) null,URL varchar(100)); insert into hoge(URL) values('/AAA/CB0199/top/'),('/AAA/001229/top/'),('/AAA/001001/top/'); update hoge set ID=replace(replace(URL,'/AAA/',''),'/top/','')
補足
アドバイスありがとうございます。 できれば、、、PHP文から処理したいのですが、、 また、values('/AAA/CB0199/top/'),('/AAA/001229/top/'),('/AAA/001001/top/'); で3つ指定されてますが、URL列に該当するレコード全部を処理させたい と考えております。 「URL列に該当するレコード全部を処理」させるのは難しいでしょうか。。
お礼
非効率ですよね、、でもそれがやりたいので、また探してみます。 アドバイスありがとうございます。