
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ランキング
-
phpの問い合わせフォームを作っ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
フォームで戻った際に入力済み...
-
プログラミング言語で、使える...
-
php 確認表示画面で値をSESSION...
-
phpのクラスメソッドの定義が長...
-
PHPを使って、別サイトの一部を...
-
php テーブルが作成できない
-
if(preg_match("/[^0-9]/",$gu_...
-
php でqiitaのサイトにあったフ...
-
複数のパソコンの中の1つのパソ...
-
ゆゆにゃ。
-
なんでブラウザでPHPを動かすた...
-
SplFileObject を利用したとき...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
PHPでこのコード自体に意味は無...
-
MySQLの配置が変わったため、db...
-
入力フォームの空白や改行を制...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
LRESULTとHRESULT
-
#define 文
-
TextChangeイベントが発生しない
-
ifdefとenum
-
クラス内に自作のイベントを定...
-
PHP + MySQL で登録時に重複チ...
-
時間差を取得結果を求めるには
-
アクティブなウィンドウのみ、...
-
callbackってなんですか。
-
【javaScript】KeyboardEventで...
-
プレロードイメージについて
-
Javascriptのreturnについての...
-
char[]とchar*
-
SetTimer関数について
-
isLoading:Boolean = trueの使い道
-
PHP requireの後にJS実行
-
functionのパラメータの渡し方...
-
【JavaScript】イベント伝播の...
おすすめ情報