前提・実現したいこと
以下テーブルにおいて、追加するデータが同じtag、tw_idであれば更新、そうでなければ新たに追加とするSQLを作成したいと考えています。
(SQLの実行はPHPにて行います。)
create table tw ( id int(11) not null auto_increment primary key, tag varchar(25) primary key, tw_id varchar(64) primary key, tw_date varchar(25), tw_txt text, tw_rt int(10), tw_fav int(10) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
うまくいっていないSQLは以下のとおりです。
(PHPのプレースホルダで実行しています。)
INSERT INTO tw (id, tag, tw_id, tw_date, tw_txt, tw_rt, tw_fav) VALUES (null, :tag, :tw_id, :tw_date, :tw_txt, :tw_rt, :tw_fav) ON DUPLICATE KEY UPDATE tag=':tag', tw_id=':tw_id', tw_date=':tw_date', tw_txt=':tw_txt', tw_rt=':tw_rt', tw_fav=':tw_fav';
発生している問題・エラーメッセージ
tag、tw_idが同じデータが来てもすべてinsertされてしまいます。(idは新規付番)
単純に、auto_incrementのidの値が異なるから追加されたように思いますが、
ネット上には「nullであれば更新できる」との情報があったりして、実現可否を判断するに至っていません。
試したこと
insert into側でidに触れないようにしてもダメでした。
INSERT INTO tw (tag, tw_id, tw_date, tw_txt, tw_rt, tw_fav) VALUES (:tag, :tw_id, :tw_date, :tw_txt, :tw_rt, :tw_fav) ON DUPLICATE KEY UPDATE tag=':tag', tw_id=':tw_id', tw_date=':tw_date', tw_txt=':tw_txt', tw_rt=':tw_rt', tw_fav=':tw_fav';
update側にKEYを入れないようにしてもダメでした。
INSERT INTO tw (id, tag, tw_id, tw_date, tw_txt, tw_rt, tw_fav) VALUES (null, :tag, :tw_id, :tw_date, :tw_txt, :tw_rt, :tw_fav) ON DUPLICATE KEY UPDATE tw_date=':tw_date', tw_txt=':tw_txt', tw_rt=':tw_rt', tw_fav=':tw_fav';
補足情報(FW/ツールのバージョンなど)
PHP
PHP 7.4.21
MariaDB
Ver 15.1 Distrib 10.4.20-MariaDB, for Linux (x86_64) using readline 5.1
長文申し訳ありません。
何かしら方策ありましたら、ご教示のほどよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー