PHP + MySQL で登録時に重複チェックをしたいです。
DBには
ID Title Name
1 Book1 Author1
2 Book2 Author2
と3000件ほど入っています。これからも増えていく予定です。
このDBにPHPから新たに100件ほどのレコードを一気に登録したいときに、
・Title名が既にDBに登録されている → 何もせずに次へ
・Title名がまだ登録されていない時 → DBへ登録
と、この様な処理をさせたいと考えています。
現状は登録したい値を配列で回し、一つ一つSELECT文で件数チェックをし、0件で有れば登録。0件以外であれば無視。と、している状況です。
ただこれですと、どうしてもサーバーに負担が掛かってしまう気がするのです。
もし、何か他に良い方法がありましたら教えていただけないでしょうか?
よろしくお願いいたします。
No.4
- 回答日時:
肝心なことを書き忘れた。
Titleがユニークキーの設定をしているならならINSERT IGNORE INTOを使えば重複キーに対しては挿入処理が行われないように処理できます。
No.3
- 回答日時:
>1)重複チェックのSQL文を工夫する
> 例)
> × select * from bookshelf where Title='hoge';
> ○ select 1 from bookshelf where Title='hoge';
普通にcount()関数使った方が良いですから
>ただこれですと、どうしてもサーバーに負担が掛かってしまう気がするのです。
そうとうショボイサーバでなければ100件程度ならそれほど問題はないでしょう。
No.2
- 回答日時:
昨今のサーバーであれば、気にするほどの負荷ではないと思いますが、それでもあえて負荷を考えるとすれば、こんな対策くらいでしょうか。
1)重複チェックのSQL文を工夫する
例)
× select * from bookshelf where Title='hoge';
○ select 1 from bookshelf where Title='hoge';
データを取得する必要はないため、SELECT文の列名部分を固定値にすることで
負荷を若干軽減できます。
2)登録のSQL文を一括実行する
ループのたびに1件1件実行するのではなく、実行して良い配列にマーク等をつけ、
最後に一括でinsert文を発行することで負荷を軽減します。
3)そもそも重複チェックをしない
これはかなり強引な方法ですが、テーブルスキーマのほうでTitleをユニークな列
として構成し、登録プログラムでは重複チェックをせず、insert文を発行します。
当然、ランタイムエラーが発生するため、@mysql_queryというようにエラーを表示
しない工夫等が必要です。
いずれにせよ、サンプルプログラムを作って実際に実機でテストするのが一番です。たぶん、今のままでも危惧するほどの負荷はかかりませんよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- gooブログ Blogの使い方(ブログ・ユーザ設定について) 1 2022/04/23 12:40
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- MySQL SQLで日付別のIDを生成するには 3 2022/10/09 10:34
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- Excel(エクセル) 重複データの抽出について 2 2023/07/21 14:52
- Windows 10 dアカウントでログイン 5 2022/11/25 17:26
- ハッキング・フィッシング詐欺 OKWAVEのログインと会員登録と新規登録 1 2023/04/10 17:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8を使うと、大量のWarningが...
-
phpでcookieがうまく保存されない
-
プログラムコードを入力する場...
-
PHPのエラーの解消法について教...
-
phpでクラスのメソッドで同名の...
-
ワードプレスサイト PHP8.0.25...
-
PHPを使って、別サイトの一部を...
-
画像ファイルの名前をそのままU...
-
phpinfo で MySQL のバージョン...
-
アマゾンのような評価の星を選...
-
SFTPなどは使わないホームペー...
-
ファイルアップロードに関して...
-
掲示板のセキュリティについて...
-
Q&Aサイトを作成していてURLの...
-
掲示板を作成しておりアップロ...
-
ファイルアップロードの上限を...
-
php 確認表示画面で値をSESSION...
-
PHPで入力フォームでデータを確...
-
PHPでCookieを使った訪問回数に...
-
PHPで訪問回数を表示するカウン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
#define 文
-
TextChangeイベントが発生しない
-
LRESULTとHRESULT
-
jQueryの関数内の変数について...
-
PHP + MySQL で登録時に重複チ...
-
時間差を取得結果を求めるには
-
fetchでreturnで戻り値
-
関数定義について質問です 架空...
-
isLoading:Boolean = trueの使い道
-
VBS 名前定義の確認→ありかなし...
-
functionのパラメータの渡し方...
-
【javaScript】KeyboardEventで...
-
ifdefとenum
-
イベントリスナーの重複登録に...
-
SetTimer関数について
-
関数内でのグローバル変数
-
Javascriptのreturnについての...
-
JavaScriptの即時関数をアロー...
おすすめ情報