質問: 御世話になります。 pdoの書き方でmysqlの操作をしています。 現在、wordpreeでサイトを開発しています。ログイン時にユーザidに基づいたパラメーターを使ってあるapiを飛ばし、そのユーザのデータを取得するプログラムを開発しています。 この時取得したapiからデータベースへの保存は完了しました。 しかし、毎回ログインする度に、同じデータを保存してしまいます。 一日一回しか動かない制約を掛けることも出来ますが、取得するデータは、本日中の使用量に関係するもので、時間とともに取得できるデータが増えるため、重ならない部分のデータを常に保存できるようにしたいです。 「知りたい内容」 保存する際に、同じデータがあったものは無視、違うデータの場合は挿入する方法を教えてください。 具体例 id time 商品id 使用量 1 1/1 10:00 2 100 2 1/1 11:00 2 150 この時、timeと商品idが同じものを排除する方法を調べています。 よろしくお願いします。 id time 商品id 使用量 3 1/1 10:00 2 100
回答: データ保存前にデータを確認すればいいのでは? 直接SQLを発行しているわけではなくAPIを使っているようですが、そのAPIの仕様がわからないと何とも言えません。 APIの機能として「あるユーザーの登録済みの使用量を取得する」と言うもの(或いはあるユーザーの全データ取得)があれば、まずそのAPIを発行してデータを確認し、その後保存用のAPI発行でいいのでは。 ``` $getApiUrl='http://example.com/api/get"; //データ取得用APIとする $setApiUrl='http://example.com/api/set"; //データ更新用APIとする /** * 特定ユーザーの使用量が引数と同じかどうか判定するメソッド * 同じ値の場合、trueを返答。 **/ function checkUserAmount($id, $amount) { } /** * 引数で指定したURLのAPIをコールする **/ function callApi($url, $data) { } //使用量が違う場合、更新APIを投げる if(!$this->checkUserAmount($id, $amount) { $this->callApi($setApiUrl, array('id' => $id, 'amount' => $amount)); } ```