質問: updateで既存のレコードに文字列を追加したい いつもお世話になります。 sql文で質問があります(環境はphp+sqliteです)。 keywordというカラムがあって、そこにはキーワードとして使う文字列が入っています。 (データベースを検索するときに使うタグを集めたようなものです) 例えば、 "本 料理 ブック cooking book" という感じです。 updateで、このカラムに別のキーワードを追加したい場合、どのようなsql文にすれば良いのでしょうか? 追加するキーワードは既存のキーワードと重複しないように追加したいです。 例えば、すでに"本 料理 ブック cooking book"というレコードがあるので、updateで「レシピ」を追加したら"本 料理 ブック cooking book レシピ"となるように、「本」を追加する場合はすでに「本」という文字列があるので既存のままで変更なしにしたいです。 そもそもこのようなことはsql文でできるのでしょうか? できないとしたら一旦selectでkeywordのレコードを取得してphpで改変したものをupdateで上書きするしかないでしょうか? どうぞよろしくお願い致します。
回答: 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