MySQLには次のようなものがあります。
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;
この機能がSQLiteに存在しないことを知っている限り、2つのクエリを実行せずに同じ効果を達成する方法があるかどうかを知りたいと思います。また、これが不可能な場合、あなたは何を好みますか:
.24.0以降のSQLiteはupsertもサポートしているため なので、次のように書くことができます
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;
INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
これには、 "ip"列にUNIQUE(またはPRIMARY KEY)制約が必要です。
編集:別の素晴らしいソリューション: https://stackoverflow.com/a/4330694/89771 。
UPDATE (+ INSERT if UPDATE fails)
を好みます。少ないコード=少ないバグ。
現在の答えは、sqlite OR mysql(ORを使用するかどうかによって異なります)でのみ動作します。しましょう...
REPLACE INTO `visits` (ip, value) VALUES ($ip, 0);