こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

UPDATEで既存のレコードに文字列を追加したい

いつもお世話になります。
SQL文で質問があります(環境はPHP+SQLiteです)。

keywordというカラムがあって、そこにはキーワードとして使う文字列が入っています。
(データベースを検索するときに使うタグを集めたようなものです)
例えば、

"本 料理 ブック cooking book"

という感じです。

UPDATEで、このカラムに別のキーワードを追加したい場合、どのようなSQL文にすれば良いのでしょうか?
追加するキーワードは既存のキーワードと重複しないように追加したいです。

例えば、すでに"本 料理 ブック cooking book"というレコードがあるので、UPDATEで「レシピ」を追加したら"本 料理 ブック cooking book レシピ"となるように、「本」を追加する場合はすでに「本」という文字列があるので既存のままで変更なしにしたいです。

そもそもこのようなことはSQL文でできるのでしょうか?

できないとしたら一旦SELECTでkeywordのレコードを取得してPHPで改変したものをUPDATEで上書きするしかないでしょうか?

どうぞよろしくお願い致します。

投稿日時 - 2013-12-07 16:28:20

QNo.8376891

すぐに回答ほしいです

質問者が選んだベストアンサー

SQLite環境ないため無試験ですが。

構文は参考URLを参照

かんたんに書いておくと
update テーブル名 set 更新列名 = 更新内容 [where条件];
ですよ

set 更新列名 = 更新内容は

set keyword = keyword || 'あああ'
と書ける。等式ではなく代入なのでA=A+1と同じ

でも追加したいキーワードが "本" のとき
keywordが '本社 料理' だったり '貸本 ブック cooking book'だったら
"本" を追加するんですよね?

なのでキーワードを区切る半角スペースを含め判断が必要。

where条件で like検索してNotで否定。つまり含まれないなら更新対象。
Keywordには先頭に、追加文字列は前後に半角スペース補ってから判断。

update テーブル名
set keyword = keyword || ' ' || 追加キーワード
where (' ' || keyword || ' ') not like (' ' || 追加キーワード || ' ')
;
かな

参考URL:http://rktsqlite.sourceforge.jp/sqlite/manip.html#update

投稿日時 - 2013-12-07 20:00:58

お礼

お礼が遅れてすみません。
教えてくださってどうもありがとうございます。
ちょっとうまく行っていないのでもう少しチャレンジしてみようと思います。

投稿日時 - 2013-12-10 20:47:24

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

#1です。
ごめんなさい。where条件で部分一致がなりたたない。

update テーブル名
set keyword = keyword || ' ' || 追加キーワード
where (' ' || keyword || ' ') not like ('% ' || 追加キーワード || ' %')
;
です。

投稿日時 - 2013-12-07 20:03:49

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-