プロが教えるわが家の防犯対策術!

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

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

"本 料理 ブック cooking book"

という感じです。

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

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

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

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

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

A 回答 (2件)

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.htm …
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/10 20:47

#1です。


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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A