ホームページ > バックエンド開発 > PHPチュートリアル > Thinkphp3.2に同じデータを挿入する解決策

Thinkphp3.2に同じデータを挿入する解決策

巴扎黑
リリース: 2023-03-14 17:42:01
オリジナル
1586 人が閲覧しました

次のエディタは、Thinkphp3.2 に同じデータを挿入する問題を完全に解決する記事を提供します。編集者はこれがとても良いと思ったので、参考として共有します。エディターをフォローして一緒に見てみましょう

問題の説明

本日TP3.2を使用してデータを挿入する際、同じデータ(いわゆる同じデータ、主キーが同じ)の挿入を避けるため、または唯一のインデックス付きフィールドも同じです)、私が作成したインデックスは次のようになります。主キーインデックスは自動インクリメントフィールドであり、重複することは不可能です。つまり、一意のインデックスが重複する可能性があります。 uid、year、mounth、day の 3 つのフィールドが同じである場合は、現在のレコードを更新します。

問題の解決策

以前この問題に直面したとき、MySQL がこの問題を解決するために ON DUPLICATE KEY UPDATE または REPLACE INTO を提供することを知っていました。

ON DUPLICATE KEY UPDATEを使用します

以下に示すように、データを挿入する前はテーブルにレコードが1つだけあります

レコードを挿入するとき、それが同じである場合、SQLステートメントは次のようになります。テーブル内の既存のレコードの場合は、レコードを更新します。それ以外の場合は、レコードが挿入されます。

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();
ログイン後にコピー

REPLACE INTOを使用します

コードは次のとおりです:

最初に次のコードを実行してデータを挿入します

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)
ログイン後にコピー

結果は以下のようになります

次のコードを実行します再度実行すると、上で挿入したコードが更新されます

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 5)
ログイン後にコピー

効果は以下の通りです

ON DUPLICATE KEY UPDATEとREPLACE INTOの違い

同じ値が表示された場合、ON DUPLICATE KEY UPDATEは既存のレコードを更新しますREPLACE INTO は前のレコードを削除してから新しいレコードを挿入します。

Thinkphp3.2の解決策

Thinkphp3.2では、同じデータを挿入する問題はadd()関数の3番目のパラメータを通じて処理されます。

Model.class.PHP の add() メソッドは、Db.class.php の insert メソッドを呼び出します。insert メソッドでは、次のコードがわかります。$replace は add です。メソッドの 3 番目のパラメータ。

以上がThinkphp3.2に同じデータを挿入する解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート