質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

780閲覧

PHPでデータベースの重複チェック

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/30 08:32

編集2017/07/30 08:33

こんにちは。

調べ方(語句)も分からないので質問させてください。

データベースの特定のテーブルに既に1000の値があった場合、
次に1000を入力する場合は1000-1に変更、更に次は1000-2と1ずつ増えて増えていくようにしたいのですが、
PHPで重複をチェックして且つ1ずつ値を増やすという書き方はどのようにすれば良いのでしょうか?
参考になるサイトだけでも教えて頂けませんでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/31 05:16

データベース(RDBMS)としてどれを選択しようとしているでしょうか、MySQLとかMariaDBなら実例のコードを教えてもらいやすいかもしれません。
退会済みユーザー

退会済みユーザー

2017/08/01 02:21

まだ解決もしていないのですが、考え方を改めないといけないようですので、再度考え直してもし分からない点があればまた質問させていただきます。 今回、いち早くご回答くださった方をベストアンサーにさせていただきます。 ありがとうございました。
guest

回答3

0

ベストアンサー

PHP というか SQLで insert時に max + 1
http://pumpkin.hatenablog.jp/entry/20080121/1200934115

投稿2017/07/30 10:15

Tak1016

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

大概のRDBMSではシーケンスという重複しない数字を発行する仕組みがあるので、
シーケンスで重複しない数字(を最大値とみなして)を自動発行させて使えば、
いちいち既存の数字の最大値とか重複とか調べなくて済むのではなかろうか。

インデックス活用すれば最大値くらいはサクッと求まるとは思うけれども。
最大値(として使う数字)をRDBMS側に自動管理させてラクに使えばパフォーマンスも良いと思った。

ちなみに、複数の人が同じタイミングで同じような動作をした場合に、
その時点の数字の最大値をテーブルから取得したとして、
+1した値の書き込みがほぼ同時発生したりするわけです。
何十人何百人でタイミングを見計らえば十分起こりうる話です。
そのため、最大値を求めて+1している間にも、
既に最大値は増え続けている可能性があるので、
安全なデータ保存を行うためには
せっかくのRDBMSを使うわけですからシーケンスという仕組みを使ったほうが無難です。

投稿2017/07/31 05:12

編集2017/07/31 08:43
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

端的に言えば、入力時にfunctionかprocedureで調整するのが妥当では?

ただしちょっと例示がわるいですね
もとのカラムにあるデータにあえて「1000」というint風のデータを
指定していますが、これを重複時に「1000-1」にするということは
varcharなどなんらかのテキスト型のデータですよね?
そういう意味で混乱するような例示はやめたほうがいいでしょう
またインクリメントの方式も最初のデータには枝番管理はよくありません。
1000-1が1000の子供であることをチェックして1000-2を追加するのでは
効率がわるいでしょう。

もしやるなら1000というデータはそのまま重複ありで保持した上で
明細用カラムを別途用意し、その2カラムを利用してunique属性を
付けるのが妥当です。

投稿2017/07/31 01:57

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問