0

こんにちは私の質問は、特定のデータベース行で使用されていない最初の番号を取得する方法です。数値は 1 から 9999 の間である必要があり、その特定のデータベース行のすべての数値と比較する必要があるため、データベース行のデータが 5 で始まる場合、使用されていない最初の数値を取得することはできません ... でこの場合は番号 1 です。次に、番号 1 でデータを作成すると、取得する必要がある次の番号は 2 で、それを使用してプロファイルを作成します。その番号はプロファイル番号であり、すべての新しいプロファイルデータベースに最初の未使用の番号が必要です。どうやってするか。どこから始めればよいかわかりません。それで、誰かがこの問題の解決のために私を正しい道に導くことができれば? ありがとう。

編集

ただし、ユーザーがこの番号を自分で選択できるようにするために必要な自動インクリメントは必要ありません。まず、この最初の番号をテキスト形式で配置することにより、ユーザーに提案する必要があります。そして、ユーザーがデータベースに既にある番号を選択すると、私のプログラムは、すべて存在する番号を選択しようとしていることをユーザーに知らせます。ですから、私のことを理解していただければ...私は mysql の基本を知っています。問題は、ユーザーが 1 つのプロファイルを削除すると、削除された番号をそれ以上使用できなくなる場合に発生します。そのためには、関数の最初の空き未使用番号が必要です。

新しい編集

私はいくつかの詳細を明確にしようとしています...最初に、これは人事用のプログラムであり、ユーザーは労働者の用量を作成します...ユーザーが新しい用量を作成しているときに、彼はこの労働者の用量番号を選択する必要があります。新しい線量の最初の未使用の番号を使用するように提案する必要があります...線量番号は線量の「ID」ではありません。Dosie 番号は、ユーザーが手動で選択する必要があります。または、最初の空き番号を新しい Dosie に与えることができます...これにより、いくつかのことが明確になると思います

4

4 に答える 4

4

おそらく、テーブル行の自動インクリメント主キーについて話しているでしょう。この「番号」を指定せずにデータを挿入するだけで、データベースが自動的に適切な (次の空き) 値に設定します。

主キーを再利用しないでください (たとえば、1、2、3、4、5 がありますが、3 を削除します。3 を再利用すると、将来、3 が実際に削除された他のレコードであったことがわかりません)。

ところで、これは非常に基本的なデータベースの知識です。MySQL またはその他の SQL リレーショナル データベースに関する入門チュートリアルをお読みください。

于 2012-06-21T13:31:02.733 に答える
1

不正なデータベースを使用しようとしています。

これを見ることができるかもしれません:MySQLで次に利用可能なIDを見つける

于 2012-06-21T13:35:50.300 に答える
0

まず、値が 1 ~ 9999 のテーブルを作成します。次に、次のクエリを 1 回実行します。

delete from table where id IN (select id from profiles)

このようにして、プロファイル テーブルにない ID を取得します。最初のものはユーザーに表示できます。レコードを保存するときは、必ずこのテーブルからその ID を削除してください。

私があなたを正しく理解していれば、これがあなたが探しているものです。

于 2012-06-21T13:48:54.543 に答える
0

1 から 9999 までの値の使用に制限されている場合は、おそらく次のようにプロセスをセットアップします。

  1. 2 つの列 (id_tracker) を持つ別のテーブルを追加します。
  2. 1 から 9999 までの ID を入力し、デフォルトでis_usedid_trackerを 0 に設定します。
  3. id_tracker.is_usedの内容に基づいて 1 に更新しyour tableます。
  4. 必要に応じて、削除を追加し、トリガーを挿入してyour tableを更新しid_trackerます。
  5. そして、次のように空のIDを選択しますSELECT id FROM id_tracker WHERE is_used = 0 ORDER BY id LIMIT 1

開始するための SQL を次に示します。

create table id_tracker
(id int not null, is_used tinyint default 0, primary key (id));

delimiter |

CREATE TRIGGER your_table_delete_trigger BEFORE DELETE ON your_table
  FOR EACH ROW
  BEGIN
      UPDATE id_tracker SET is_used = 0 WHERE id = OLD.your_table_id;
  END;
|

CREATE TRIGGER your_table_insert_trigger AFTER INSERT ON your_table
  FOR EACH ROW
  BEGIN
      UPDATE id_tracker SET is_used = 1 WHERE id = NEW.your_table_id;
  END;
|

delimiter ;

** 注: 上記は MySQL の場合です

于 2012-06-21T14:05:23.297 に答える