みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

FMDBについて

objective-cでFMDBを採用しています。

新たにレコードをinsertするときに、すでに同じ値のフィールドが存在するときは無視するという風にしたいと思っています。

そこでignoreを用いて
NSString *insert = [NSString stringWithFormat:@"insert ignore into search (date, site, title, url) values (%ld, '%@', '%@', '%@')", (long)date, siteName, title, link];

上記で実行したのですが、
DB Error: 1 "near "ignore": syntax error"

このようなエラーがでてしまいます。

FMDBではどうのような記述をすればいいのでしょうか?

投稿日時 - 2015-05-02 20:30:28

QNo.8967833

すぐに回答ほしいです

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

FMDB ということは使用しているデータベースは SQLite3 ですね。この場合は INSERT ~ SELECT ~ WHERE NOT EXISTS で存在チェックしながら挿入します。
以下に SQL例を提示します。(FMDB ライブラリ表記への変換は質問者さんのほうで工夫してください)

INSERT INTO search (date, site, title, url)
SELECT データ1, データ2, データ3, データ4
WHERE NOT EXISTS (
SELECT 1 FROM search WHERE
date=データ1 AND site=データ2 AND title=データ3 AND url=データ4)

※NOT EXISTS 内の WHERE 句は、search テーブルにPKが張られているのであれば PK の項目のみに省略できます。

なお、insert ignore は MySQL の『方言』ですので、他の DBMS で使用することはできません。

投稿日時 - 2015-05-02 22:28:59

お礼

迅速な回答ありがとうございます。
非常に助かりました。

投稿日時 - 2015-05-03 10:46:53

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

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

回答(1)

あなたにオススメの質問